标签:单点 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