记录编号 444105 评测结果 AAAAAAAAAA
题目名称 Color the Axis 最终得分 100
用户昵称 Gravatar+1s 是否通过 通过
代码语言 C++ 运行时间 2.388 s
提交时间 2017-09-02 08:31:55 内存使用 46.06 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
struct{long long l,r,iswhite;}stree[2000000];
void phd(int idx)
{
	if(stree[idx].iswhite==1&&stree[idx].l!=stree[idx].r)
	{
		stree[idx*2].iswhite=1;
		stree[idx*2+1].iswhite=1;
	}
}
void bui(int l,int r,int idx)
{
	stree[idx].l=l;
	stree[idx].r=r;
	stree[idx].iswhite=0;
	if(l==r)return;
	int m=(l+r)/2;
	bui(l,m,idx*2);
	bui(m+1,r,idx*2+1);
}
void upda(int l,int r,int idx)
{
	if(stree[idx].l==0&&stree[idx].r==0)return;
	if(stree[idx].l==l&&stree[idx].r==r)
	{
		stree[idx].iswhite=1;
		return;
	}
	phd(idx);
	if(r<=stree[idx*2].r)upda(l,r,idx*2);
	else if(l>=stree[idx*2+1].l)upda(l,r,idx*2+1);
	else
	{
		upda(l,stree[idx*2].r,idx*2);
		upda(stree[idx*2+1].l,r,idx*2+1);
	}
	stree[idx].iswhite=stree[idx*2].iswhite&&stree[idx*2+1].iswhite;
}
int qry(int idx)
{
	if(stree[idx].l==0&&stree[idx].r==0)return 0;
	phd(idx);
	if(stree[idx].iswhite==0)
	{
		if(stree[idx].l==stree[idx].r)return 1;
		return qry(idx*2)+qry(idx*2+1);
	}
	else return 0;
}
int main()
{
	freopen("axis.in","r",stdin);
	freopen("axis.out","w",stdout);
	int n,m;
	scanf("%d %d",&n,&m);
	bui(1,n,1);
	for(int i=1;i<=m;i++)
	{
		int l,r;
		scanf("%d %d",&l,&r);
		upda(l,r,1);
		printf("%d\n",qry(1));
	}
	return 0;
}