题意:类似于冷血格斗场,但是每个力量只出现一次,判断起来更简单,
学习使用lower_bound和upper_bound
#include <iostream>
#include <map>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <iterator>
using namespace std;
map<int,int> all;
int main(){
int n;
cin>>n;
all.insert(pair<int,int>(1000000000,1));
map<int,int>::iterator i;
while (n--) {
int a,b;
cin>>a>>b;
i=all.upper_bound(b);//第一个大于等于其的元素
if(i==all.end()){//判断特殊点,越界
i--;
cout<<a<<" "<<i->second<<endl;
}else{
if(i==all.begin()){//判断特殊点,第一个
cout<<a<<" "<<i->second<<endl;
}else{
int tmp1=abs(i->first-b);
i--;
int tmp2=abs(i->first-b);
if(tmp2<=tmp1){//假如前后相等时,选力量少的
cout<<a<<" "<<i->second<<endl;
}else{
i++;
cout<<a<<" "<<i->second<<endl;
}
}
}
all.insert(pair<int,int>(b,a));
}
}