记录编号 84898 评测结果 AAAAAAAAAAAAAA
题目名称 线段覆盖 最终得分 100
用户昵称 GravatarrpCardinal 是否通过 通过
代码语言 C++ 运行时间 1.543 s
提交时间 2013-12-21 18:57:29 内存使用 11.29 MiB
显示代码纯文本
#include <cstdio>
#define L(x) ((x)<<1)
#define R(x) (((x)<<1)+1)
#define M(a,b) (((a)+(b))>>1)

const int MAXLEN=524300;

int n,m,a,b,c;

struct segtr
{
	int l[MAXLEN],r[MAXLEN],co[MAXLEN],ct[MAXLEN],len[MAXLEN];
	bool lc[MAXLEN],rc[MAXLEN];
	void build(int p,int pl,int pr)
	{
		l[p]=pl; r[p]=pr;
		if (pl<pr)
		{
			build(L(p),pl,M(pl,pr));
			build(R(p),M(pl,pr)+1,pr);
		}
	}
	void insert(int p,int pl,int pr,int tt)
	{
		if (pl==l[p]&&pr==r[p])
		{
			if (tt==1) co[p]++;
			else if (tt==2) co[p]--;
		}
		else
		{
			if (pr<=M(l[p],r[p]))
				insert(L(p),pl,pr,tt);
			else if (pl>M(l[p],r[p]))
				insert(R(p),pl,pr,tt);
			else
			{
				insert(L(p),pl,M(l[p],r[p]),tt);
				insert(R(p),M(l[p],r[p])+1,pr,tt);
			}
		}
		if (co[p])
		{
			len[p]=r[p]-l[p]+1;
			ct[p]=1;
			lc[p]=rc[p]=true;
		}
		else
		{
			if (l[p]==r[p])
			{
				lc[p]=rc[p]=false;
				len[p]=0; ct[p]=0;
			}
			else
			{
				lc[p]=lc[L(p)];
				rc[p]=rc[R(p)];
				len[p]=len[L(p)]+len[R(p)];
				ct[p]=ct[L(p)]+ct[R(p)];
				if (rc[L(p)]&&lc[R(p)]) ct[p]--;
			}
		}		
	}
};

segtr T;

int main()
{
	freopen("xdfg.in","r",stdin);
	freopen("xdfg.out","w",stdout);
	scanf("%d%d",&n,&m);
	T.build(1,1,n);
	while (m--)
	{
		scanf("%d%d%d",&c,&a,&b);
		T.insert(1,a,a+b-1,c);
		printf("%d %d\n",T.ct[1],T.len[1]);
	}
	fclose(stdin); fclose(stdout);
	return 0;
}