set思路:利用set具有的强大的功能(实际上属于二叉平衡树的内容),插入一个元素后查找前驱和后继都一定最接近的,set中原本就排好序了。
链表思路:
set代码:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<set>
#include<map>
using namespace std;
const int N=1e5+10;
typedef pair<int,int>PII;
set<PII>s;
int main()
{
int n,a;
scanf("%d",&n);
scanf("%d",&a);
s.insert({a,1});
for(int i=2;i<=n;i++)
{
scanf("%d",&a);
s.insert({a,i});
auto t=s.find({a,i});
PII ans;
ans.first=1e9;
if(++t!=s.end())
{
ans={(*t).first-a,(*t).second};
}
t--;
if(t--!=s.begin()&&ans.first>=a-(*t).first)
{
ans={a-(*t).first,(*t).second};
}
cout<<ans.first<<' '<<ans.second<<endl;
}
return 0;
}