1. 程式人生 > >B - I Hate It

B - I Hate It

har pan tex fff iostream fin space 16px nta

B - I Hate It

HDU - 1754 思路:線段樹板子。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 200010
using namespace std;
int n,m;
struct nond{
    int l,r,max;
}tree[MAXN*4];
void up(int now){
    tree[now].max=max(tree[now*2
].max,tree[now*2+1].max); } void build(int now,int l,int r){ tree[now].l=l;tree[now].r=r; if(tree[now].l==tree[now].r){ scanf("%d",&tree[now].max); return ; } int mid=(tree[now].l+tree[now].r)/2; build(now*2,l,mid); build(now*2+1,mid+1,r); up(now); }
void change(int now,int pos,int k){ if(tree[now].l==tree[now].r){ tree[now].max=k; return ; } int mid=(tree[now].l+tree[now].r)/2; if(pos<=mid) change(now*2,pos,k); else change(now*2+1,pos,k); up(now); } int query(int now,int l,int r){
if(tree[now].l==l&&tree[now].r==r) return tree[now].max; int mid=(tree[now].l+tree[now].r)/2; if(r<=mid) return query(now*2,l,r); else if(l>mid) return query(now*2+1,l,r); else return max(query(now*2,l,mid),query(now*2+1,mid+1,r)); } int main(){ while(scanf("%d%d",&n,&m)!=EOF){ build(1,1,n); for(int i=1;i<=m;i++){ char c;int x,y; scanf("\n%c%d%d",&c,&x,&y); if(c==Q) printf("%d\n",query(1,x,y)); else if(c==U) change(1,x,y); } } }

B - I Hate It