标签:单点 oid 开始 ons 修改 const 区间查询 定义 modify
const ll M=1<<19;//从1开始,不能修改0和M
ll T[M+M];void modify(int n,int v){
    for(T[n+=M]=v,n>>=1;n;n>>=1)
        T[n]=T[n+n]+T[n+n+1];
}
ll query(ll l,ll r){
    ll ans=0;
    for(l+=M-1,r+=M+1;l^r^1;l>>=1,r>>=1){
        if(~l&1) ans+=T[l^1];
        if(r&1) ans+=T[r^1];
    }
    return ans;
}void modify(ll n,ll v){
    for(T[n+=M]=v,n>>=1;n;n>>=1)
        T[n]=max(T[n+n],T[n+n+1]);
}
ll query(ll l,ll r){
    ll rmax=-INF,lmax=-INF;
    for(l+=M-1,r+=M+1;l^r^1;l>>=1,r>>=1){
        if(~l&1) lmax=max(lmax,T[l^1]);
        if(r&1) rmax=max(rmax,T[r^1]);
    }
    return max(lmax,rmax);
}void add(int l,int r,int w){
    for(l+=m-1,r+=m+1;l^r^1;l>>=1,r>>=1){
        if(~l&1) T[l^1]+=w;
        if(r&1) T[r^1]+=w;
    }
}
int query(int x){
    int ans=0;
    for(x+=m;x;x>>=1)
        ans+=T[x];
    return ans;
}标签:单点 oid 开始 ons 修改 const 区间查询 定义 modify
原文地址:https://www.cnblogs.com/ucprer/p/11275901.html