传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4585
思路:首先要知道map<key,value>是会自动对key值排序的,map实质上就是一棵红黑树(忘了在哪看过)。lower_bound()也是关于key值来查找。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
using namespace std;
map<int,int> mp;
int main()
{
int n,x,y;
while(cin>>n&&n)
{
mp.clear();
mp[1000000000]=1;
for(int i=0;i<n;i++)
{
cin>>x>>y;
cout<<x<<' ';
map<int,int>::iterator it=mp.lower_bound(y);
if(it==mp.end())
{
it--;
cout<<it->second<<endl;
}
else if(it==mp.begin())
{
cout<<it->second<<endl;
}
else
{
int value=it->second,key=it->first;
it--;
if(y-it->first<=key-y) //
{
cout<<it->second<<endl;;
}
else cout<<value<<endl;
}
mp[y]=x;
}
}
return 0;
}