#include<map>
#include<iostream>
#include<algorithm>
#include<set>
#include<cstdlib>
using namespace std;
//本题与热血格斗场的区别
//power可以相同;相同者按id排序;故引入<set>,map::second
//id可以无序(甚至不连续)输入
int main()
{
map<int,set<int> > club;
map<int,set<int> >::iterator j;
club[1000000000].insert(1);
int n,id,power;
cin>>n;
while(n--)
{
cin>>id>>power;
j=club.lower_bound(power);
if(j==club.begin())
{
cout<<id<<" "<<*(j->second.begin())<<endl;//second.begin()是同power下set中id最小的迭代器
}
else if(j==club.end())//club.end()是同power下set中id最大的元素的迭代器
{
j--;
cout<<id<<" "<<*(j->second.end())<<endl;
}
else
{
int right=(j->first)-power;
j--;
int left=power-(j->first);
if(right>left)
{
cout<<id<<" "<<*(j->second.begin())<<endl;
}
else if(right<left)
{
j++;
cout<<id<<" "<<*(j->second.begin())<<endl;
}
else//right==left 找id最小 即判断左右的second.begin()
{
int l=*(j->second.begin());//j->second.begin()是set的迭代器
j++;
int r=*(j->second.begin());
cout<<id<<" "<<min(l,r)<<endl;
}
}
club[power].insert(id);
}
return 0;
}
C++ 冷血格斗场
于 2021-06-08 14:34:49 首次发布