#include<bits/stdc++.h>
using namespace std;
int n,a,ans;
set<int>s;
int main()
{
ios_base::sync_with_stdio(false);
cin>>n>>a;
s.insert(a);
ans=a;
for(int i=2;i<=n;i++)
{
cin>>a;
set<int>::iterator r=s.lower_bound(a);//第一个大于a的数
if(r==s.end())//特判情况一,集合里面没有比他大的数,那么最接近它的就是最后一个即
{
ans+=abs(a-*(--r));
s.insert(a);
continue;
}
set<int>::iterator l;
if(r!=s.begin()) l=--s.lower_bound(a);//第一个大于a的数左边那个
else//特判情况二,第一个大于a的数为集合里面第一个数,那么ans直接加它就行了
{
ans+=abs(a-*r);
s.insert(a);
continue;
}
ans+=min(abs(a-*l),abs(a-*r));
s.insert(a);
}
cout<<ans;
return 0;
}
P2234 [HNOI2002] 营业额统计
最新推荐文章于 2024-10-08 09:44:01 发布