警示后人(线段树+二分做法)
查看原帖
警示后人(线段树+二分做法)
122235
Qwdb楼主2023/8/6 12:07

注意你的check函数,如果全都是 00 或者全都是 11 ,updateupdate 的范围很容易出问题,建议特判全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;
	}
}
2023/8/6 12:07
加载中...