如果你使用了线段树,添加点的时候不能直接覆盖,应该是取最大值,清空的时候才能直接赋值
正确的:
void change(int x,int k,int p,int s,int t){
if(s==t){
tr[p]=max(tr[p],k);return;
}
int mid=(s+t)>>1;
if(mid>=x)change(x,k,p<<1,s,mid);
else change(x,k,p<<1|1,mid+1,t);
pushup(p);
}
错误的
void change(int x,int k,int p,int s,int t){
if(s==t){
tr[p]=k;return;
}
int mid=(s+t)>>1;
if(mid>=x)change(x,k,p<<1,s,mid);
else change(x,k,p<<1|1,mid+1,t);
pushup(p);
}