记录编号 203772 评测结果 AAAAAAAAA
题目名称 [POI 2001] 区间 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 C++ 运行时间 0.140 s
提交时间 2015-11-03 16:44:55 内存使用 21.27 MiB
显示代码纯文本
#include<cstdio>
#define n 2000000
int EPX,N;
inline void in(int &TEMP)
{
	for(TEMP=getchar();TEMP<48||TEMP>57;TEMP=getchar());
	TEMP^=48;
	for(EPX=getchar();EPX<58&&EPX>47;EPX=getchar())
		TEMP=(TEMP<<3)+(TEMP<<1)+(EPX^48);
}
int L,R;
bool tree[11000000];
inline void add(int l,int r,int rt)
{
	if(tree[rt])
	    return;
	if(L<=l&&r<=R)
	{
		tree[rt]=1;
		return;
	}
	int mid=l+r>>1;
	if(L<=mid)
	    add(l,mid,rt<<1);
	if(R>mid)
	    add(mid+1,r,rt<<1|1);
}
bool ans[11000000];
inline void find(int l,int r,int rt)
{
	if(l==r)
	{
		if(tree[rt])
		    ans[l]=1;
		return;
	}
	if(tree[rt])
	{
		tree[rt<<1]=1;
		tree[rt<<1|1]=1;
	}
	int mid=l+r>>1;
	find(l,mid,rt<<1);
	find(mid+1,r,rt<<1|1);
}
int main()
{
	freopen("prz.in","r",stdin);
	freopen("prz.out","w",stdout);
	in(N);
	while(N--)
	{
		in(L),in(R);
		L<<=1;
		R<<=1;
		add(2,n,1);
	}
	find(2,n,1);
	for(int i=2;i<=n;++i)
	    if(ans[i])
	    {
			L=i;
			while(ans[++i]);
			printf("%d %d\n",L>>1,(i-1)>>1);
	    }
	//while(1);
}