1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<set> 5 using namespace std; 6 typedef long long LL; 7 typedef set<LL>::iterator setit; 8 const LL INF=0x3f3f3f3f3f3f3f3f; 9 int n; 10 LL ans; 11 set<LL> s; 12 int main(){ 13 scanf("%d",&n); 14 scanf("%lld",&ans);s.insert(ans); 15 for(int i=1;i<n;++i){ 16 LL tmp,x=INF,y=INF; 17 scanf("%lld",&tmp); 18 if(s.find(tmp)!=s.end()) continue;//已存在相同的数 19 setit it=s.upper_bound(tmp); 20 if(it!=s.end()) x=abs(*it-tmp);//若能找到不小于它的数 求出两数之差 21 if(it!=s.begin()) y=abs(*(--it)-tmp);//若能找到不大于它的数 求出两数之差 22 ans+=min(x,y);//比较两个差值的大小 23 s.insert(tmp);//插入该数 24 } 25 printf("%lld",ans); 26 return 0; 27 }
原文:https://www.cnblogs.com/yu-xing/p/10351305.html