—————————————————————————————————————————————————— —————————————————————前排护眼——————————————————————— ——————————————————————————————————————————————————
单点更新+区间查询
typedef long long ll;
ll n,m;
ll value[1000002];
ll data[200002];
void build(int o,int l,int r){ //建树
if(l==r){
value[o]=value[l];
return ;
}
ll mid=(l+r)/2;
build(o*2,l,m);
build(o*2+1,m+1,r);
value[o]=max(value[o*2],value[o*2+1]);
}
void update(int o,int l,int r,int x,int d){ //单点更新,将x的value改为d
if(l==r){
value[o]=d;
return ;
}
int m=(l+r)/2;
if(x<=m)update(o*2,l,m,x,d);
if(m+1<=x)update(o*2+1,m+1,r,x,d);
value[o]=max(value[o*2],value[o*2+1]);
}
int query(int o,int l,int r,int ql,int qr){ //查询区间[ql,qr]的最大值
if(ql<=l&&r<=qr)return value[o];
int m=(l+r)/2;
int ans=0;
if(ql<=m){
ans=max(ans,query(o*2,l,m,ql,qr));
}
if(qr>=m+1){
ans=max(ans,query(o*2+1,m+1,r,ql,qr));
}
return ans;
}