stl map
http://blog.csdn.net/dongdongzhang_/article/details/9884345
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<map>
#include<set>
#include<string>
#include<cctype>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int n;
int num,grade;
while(~scanf("%d",&n)&&n)
{
map<int,int> m;
m[1000000000]=1;
while(n--)
{
scanf("%d%d",&num,&grade);
m[grade]=num;
map<int,int>::iterator iter1=m.find(grade);
map<int,int>::iterator iter2=m.find(grade);
int ans;
if(iter1==m.begin())
ans=(++iter1)->second;
else
{
if(abs((++iter1)->first-grade)>=abs((--iter2)->first-grade))
ans=iter2->second;
else
ans=iter1->second;
}
printf("%d %d\n",num,ans);
}
m.clear();
}
return 0;
}