比赛 |
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;
}