(如果你用的是第一篇题解的 O(nlog2n) 二分 + 线段树做法)
看看是不是注释的地方出了问题。
inline bool check(int x)
{
build(1,1,n,x);
for(int i=1;i<=m;i++)
{
int opt=q[i].opt,l=q[i].l,r=q[i].r;
int tmp=query(1,1,n,l,r);
if(tmp==0||tmp==r-l+1)continue; // here,特判是不是全是 0 或 1
if(opt==0)
{
modify(1,1,n,r-tmp+1,r,1);
modify(1,1,n,l,r-tmp,0);
}
else
{
modify(1,1,n,l,l+tmp-1,1);
modify(1,1,n,l+tmp,r,0);
}
}
return query(1,1,n,p,p);
}
如果不加,那么在 modify
中,左端点有可能大于右端点,然后就 GG 了。
附上一组数据:
input:
6 3
1 6 2 5 3 4
0 1 4
1 3 6
0 2 4
1
output:
1