样例未过
#include<bits/stdc++.h>
using namespace std;
#define ls t[x].ch[0]
#define rs t[x].ch[1]
using namespace std;
int N=100001,cnt;
struct node {
int ch[2],cnt,size,val,rd;
} t[100001];
void up(int x) {
t[x].size=t[t[x].ch[0]].size+t[t[x].ch[1]].size+t[x].cnt;
}
void rotate(int &x,int d) {
int tem= t[x].ch[d];
t[x].ch[d]=t[tem].ch[d^1];
t[tem].ch[d^1]=x;
up(x);
up(tem);
x=tem;
}
void insert(int &x,int val) {
if(!x) {
x=++cnt;
t[x].cnt=t[x].size=1;
t[x].val=val,t[x].rd=rand();
return;
}
t[x].size++;
if(t[x].val == val) {
t[x].cnt++;
return;
}
int d=t[x].val < val;
insert(t[x].ch[d],val);
if(t[x].rd > t[t[x].ch[d]].rd) rotate(x,d);
}
void delet(int &x,int val) {
if(!x) return;
if(t[x].val == val) {
if(t[x].cnt > 1) {
t[x].cnt--;
t[x].size--;
return;
}
bool d=t[ls].rd > t[rs].rd;
if(ls == 0 || rs == 0) x=ls+rs;
else rotate(x,d),delet(x,val);
} else t[x].size--,delet(t[x].ch[t[x].val<val],val);
}
int kth(int root,int k) {
int x=root;
while(1) {
if(k <= t[ls].size) x=ls;
else if(k > t[ls].size+t[x].cnt)
k -= t[ls].size+t[x].cnt,x=rs;
else return t[x].val;
}
}
int rnk(int x,int val) {
if(!x) return 1;
if(t[x].val == val) return t[ls].size+1;
if(t[x].val>val)return rnk(ls,val);
return rnk(rs,val)+t[ls].size+t[x].cnt;
}
int ans;
int small(int root,int v){
int k=root,ret=0;
while(k){
if(t[k].val<=v) ret=t[k].val,k=t[k].ch[1];
else k=t[k].ch[0];
}
return ret;
}
int big(int root,int v){
int k=root,ret=0;
while(k){
if(t[k].val>=v) ret=t[k].val,k=t[k].ch[0];
else k=t[k].ch[1];
}
return ret;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t,rt;
cin>>t;
int k;
cin>>k;
ans+=k;
t--;
while(t--){
int x;
cin>>x;
int a=small(rt,x),b=big(rt,x);
ans+=min(x-a,b-x);
insert(rt,x);
}
cout<<ans;
}