线段树写法

int T[maxn],a[maxn];
void build(int rt,int l,int r){
     if(l == r){
          T[rt] = a[l];
          return;
     }
     int mid = l+r >> 1;
     build(rt<<1,l,mid);
     build(rt<<1|1,mid+1,r);
     T[rt] = max(T[rt<<1],T[rt<<1|1]);
}
void modify(int rt,int l,int r,int pos,int val){
     if(l == r){
          T[rt] = val;
          return;
     }     
     int mid = l+r >> 1;
     if(pos <= mid) modify(rt<<1,l,mid,pos,val);
     else modify(rt<<1|1,mid+1,r,pos,val);
     T[rt] = max(T[rt<<1],T[rt<<1|1]);
}
int query(int rt,int l,int r,int L,int R){
    if(L <= l && r <= R) return T[rt];
    int mid = l+r >> 1;
    if(R <= mid) return query(rt<<1,l,mid,L,R);
    if(L >  mid) return query(rt<<1|1,mid+1,r,L,R);
    return max(query(rt<<1,l,mid,L,R),query(rt<<1|1,mid+1,r,L,R));
}
posted @ 2017-03-14 15:09  Sky_miner  阅读(217)  评论(0)    收藏  举报