大佬能帮忙看看吗?
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
ll a[100010],b[100010];
pair<ll,int> ans[100010];
struct Node{
ll val;
int prev,next;
}node[100010];
int head,tail,tot;
void Intialize(){
tot=2;
head=1;
tail=2;
node[head].next=tail;
node[tail].prev=head;
node[head].val=-1e10;
node[tail].val=1e10;
}
void Insert(int p,ll value){
node[++tot].val=value;
node[node[p].next].prev=tot;
node[tot].next=node[p].next;
node[p].next=tot;
node[tot].prev=p;
}
void Remove(int p){
node[node[p].prev].next=node[p].next;
node[node[p].next].prev=node[p].prev;
}
int Found(ll x){
int l=1,r=n;
while(l<r){
int mid=(l+r)>>1;
if(a[mid]>=x) r=mid;
else l=mid+1;
}
return l;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
Intialize();
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
b[i]=a[i];
}
sort(a+1,a+n+1);
for(int i=1;i<=n;++i) Insert((i==1?1:i+1),a[i]);
for(int i=n;i>=2;--i){
int idx=Found(b[i])+2;
ll now=node[idx].val;
ll p=node[node[idx].prev].val;
ll q=node[node[idx].next].val;
if(now-p<=q-now){
ans[i].first=now-p;
ans[i].second=Found(p);
}else{
ans[i].first=q-now;
ans[i].second=Found(q);
}
Remove(idx);
}
for(int i=2;i<=n;++i) cout<<ans[i].first<<" "<<ans[i].second<<"\n";
return 0;
}