rt,样例不过,提交0pts
#include<bits/stdc++.h>
using namespace std;
const int N=50005;
const int INF=1e7+10;
int n,tot,rt,x,kkk;
struct treap{
int c[2];
int val,ran,cnt;
}t[N];
int add(int v){
t[++tot].val=v;
t[tot].ran=rand();
t[tot].cnt=1;
return tot;
}
void build(int v){
rt=add(v);
}
void chen_zhe(int &k,int v){
int six_kills=t[k].c[!v];
t[k].c[!v]=t[k].c[v];
t[k].c[v]=k;
k=six_kills;
}
void insert(int &k,int v){
if(!k){
k=add(v);
return;
}
if(v==t[k].val)t[k].cnt++;
else{
int d=v<t[k].val?0:1;
insert(t[k].c[d],v);
if(t[k].ran>t[t[k].c[d]].ran)chen_zhe(k,!d);
}
}
int query_less(int x){
int k=rt;
int res=-INF;
while(k){
if(t[k].val<=x)res=t[k].val,k=t[k].c[1];
else k=t[k].c[0];
}
return res;
}
int query_greater(int x){
int k=rt;
int res=INF;
while(k){
if(t[k].val>=x)res=t[k].val,k=t[k].c[0];
else k=t[k].c[1];
}
return res;
}
int main(){
cin>>n>>x;
build(x);
for(int i=2;i<=n;i++){
cin>>x;
int minn=query_less(x);
int maxn=query_greater(x);
int ans=min(x-minn,maxn-x);
kkk+=ans;
insert(rt,x);
}
cout<<kkk<<endl;
return 0;
}