注意你的check函数,如果全都是 0 或者全都是 1 ,update 的范围很容易出问题,建议特判全0全1的情况。
参考代码:
bool check()
{
build(1,1,n);
for(int i=1;i<=m;i++)
{
int l=act[i][1];
int r=act[i][2];
int cnt=query(1,1,n,l,r);
if(cnt==0)
{
update(1,1,n,l,r,0);
}
else if(cnt==r-l+1)
{
update(1,1,n,l,r,1);
}
else
{
if(act[i][0]==0)
{
update(1,1,n,l,r-cnt,0);
update(1,1,n,r-cnt+1,r,1);
}
else
{
update(1,1,n,l,l+cnt-1,1);
update(1,1,n,l+cnt,r,0);
}
}
}
if(query(1,1,n,q,q)==1)
{
return 1;
}
else
{
return 0;
}
}