​原题链接​

AC代码:

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <map>
#include <algorithm>
using namespace std;
const int maxn=1e6+5;
int main(){
ios::sync_with_stdio(false);
map<int,int>mp;
map<int,int>::iterator it;
mp[1e9]=1;
int t;
cin>>t;
while(t--){
int id,x,dif,ans,flag=1;
cin>>id>>x;
it=mp.upper_bound(x);//先找到第一个大于x的元素位置
if(it==mp.end())it--,flag=0;//不存在大于x的元素,则向前找就是第一个比它小的元素
dif=it->first-x;
ans=it->second;
if(flag&&it!=mp.begin()){
it--;//如果存在比它大的元素,则跟比它小的那个元素比较一下
if(dif>=x-(it->first))ans=it->second;
}
cout<<id<<" "<<ans<<endl;
mp[x]=id;
}
}