テンプレート - セグメントツリー

ここで他の操作に変更する例間隔の最大値は、であるにかかわらず、各音符の値の操作機能、および返されたクエリーを変更します。

ここで、最小の素子部は、最大値は-1(クエリのセクションと交差しない現在の間隔の結果を示す)を設定します。

方法着信コールL及びR(1、N)であるので、1から実際に数えて(Aを含む)は、このセグメントツリーのでことに留意されたいです。

最後に、慎重なバーストMAXMなります。

const int MAXM=200000;
int a[MAXM+5],st[(MAXM<<2)+5];

inline void pushup(int o){
    st[o]=max(st[o<<1],st[o<<1|1]);
}
 
void build(int o,int l,int r){
    if(l==r) st[o]=a[l];
    else{
        int m=l+((r-l)>>1);
        build(o<<1,l,m);
        build(o<<1|1,m+1,r);
        pushup(o);
    }
}
 
void update(int o,int l,int r,int id,int v){
    if(l==r) st[o]=v;
    else{
        int m=l+((r-l)>>1);
        if(id<=m) update(o<<1,l,m,id,v);
        else update(o<<1|1,m+1,r,id,v);
        pushup(o);
    }
}
 
int query(int o,int l,int r,int a,int b){
    if(r<a||l>b) return -1;
    if(a<=l&&r<=b) return st[o];
    int m=l+((r-l)>>1);
    int p1=query(o<<1,l,m,a,b),p2=query(o<<1|1,m+1,r,a,b);
    return max(p1,p2);
}
 

おすすめ

転載: www.cnblogs.com/Yinku/p/10936478.html