有可能你在区间取相反数的时候只是打了个取反标记,而不是将标记取反。
比如我的错误代码:
void add2(int x,int l,int r)
{
sum[x]=-sum[x];
int t1=maxn[x],t2=minn[x];
minn[x]=-t1;
maxn[x]=-t2;
tag1[x]=-1;
}
正确写法:
void add2(int x,int l,int r)
{
sum[x]=-sum[x];
int t1=maxn[x],t2=minn[x];
minn[x]=-t1;
maxn[x]=-t2;
if(tag1[x]==-1)tag1[x]=1;
else tag1[x]=-1;
}
(其实感觉这是挺智障的错误,应该没人会犯吧)