比赛 20120704 评测结果 AAAAAAAAAA
题目名称 椰子 最终得分 100
用户昵称 Czb。 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-07-04 08:57:08
显示代码纯文本
#include<stdio.h>
#include<string.h>

int Q,n,a[1001];

int X[1001],Y[1001];

int t[3000],v[3000][1000];

void Transform(int k,int x)
{
	if(t[x]>t[x-1]&&t[x]>t[x+1])
	{
		if(a[k]>a[v[x][t[x]]])
		{
			Transform(v[x][t[x]],x+1);
			v[x][t[x]]=k;
		}
		else
		{
			Transform(k,x-1);
		}
	}
	else if(t[x]>t[x-1])
	{
		if(a[k]>a[v[x][t[x]]])
		{
			Transform(v[x][t[x]],x-1);
			v[x][t[x]]=k;
		}
		else
		{
			Transform(k,x-1);
		}
	}
	else if(t[x]>t[x+1])
	{
		if(a[k]>a[v[x][t[x]]])
		{
			Transform(v[x][t[x]],x+1);
			v[x][t[x]]=k;
		}
		else
		{
			Transform(k,x+1);
		}
	}
	else
	{
		v[x][++t[x]]=k;
	}
}

int main()
{
	freopen("coconuts.in","r",stdin);
	freopen("coconuts.out","w",stdout);
	int i,j,x;
	scanf("%d",&Q);
	while(Q--)
	{
		memset(t,0,sizeof(t));
		memset(v,0,sizeof(v));
		scanf("%d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%d%d",&x,&a[i]);
			Transform(i,x+1000);
		}
		for(i=1;i<=3000;i++)
		{
			for(j=1;j<=t[i];j++)
			{
				X[v[i][j]]=j;
				Y[v[i][j]]=i;
			}
		}
		for(i=1;i<=n;i++)
		{
			printf("%d %d\n",X[i],Y[i]-1000);
		}
		printf("\n");
	}
	return 0;
}