AcWing 136. 邻值查找
原题链接
中等
作者:
fairydetail
,
2019-04-29 22:23:28
,
所有人可见
,
阅读 1370
C++ 代码
#include<iostream>
#include<set>//STL set 动态维护有序序列
#include<algorithm>
#include<limits.h>
using namespace std;
const int N=1e5+10;
int a[N];
int main()
{
int n;
cin>>n;
set<pair<int,int>> A;//同时存值和下标
A.insert({INT_MIN,0});//避免处理边界问题
A.insert({INT_MAX,0});
for(int i=1;i<=n;i++)
{
int a;
cin>>a;
if(i>1)
{
auto it=A.upper_bound({a,0});//返回大于a的最小值的定位
auto lt=it;
lt--;
long long left=(long long) lt->first-a;
long long right=(long long) it->first-a;
if(abs(left)<=abs(right))//可以先存一下
{
cout<<abs(left)<<' '<<lt->second<<endl;
}
else cout<<abs(right)<<' '<<it->second<<endl;
}
A.insert({a,i});
}
return 0;
}