题目链接 点击打开链接
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<stdlib.h>
#include<set>
#include<map>
#include<queue>
using namespace std;
int main()
{
int n,i;
while(scanf("%d",&n)&&n!=0)
{
int resulta[100005],resultb[100005];
map<int,int> m;
map<int,int> ::iterator it;
m[1000000000]=1;
for(i=0; i<n; i++)
{
int id;
int grade;
scanf("%d%d",&id,&grade);
resulta[i]=id;
it=m.lower_bound(grade);
if(it==m.end())
{
it--;
resultb[i]=it->second;
}
else if(it==m.begin())
{
resultb[i]=it->second;
}
else
{
int Maxgrade=it->first;
int Maxid=it->second;
it--;
int Mingrade=it->first;
int Minid=it->second;
if(grade-Mingrade<=Maxgrade-grade)
{
resultb[i]=Minid;
}
else resultb[i]=Maxid;
}
m[grade]=id;
}
for(i=0; i<n; i++)
{
printf("%d %d\n",resulta[i],resultb[i]);
}
}
return 0;
}