1.解题思路
看到这题开始往栈和队列的方向想想了很久没有思路,通过查看后面的题解学习了set集合以及对应迭代器的使用方法,set结构中lower_bound(p)方法,即找到大于等于数p的最小数这一方法完美契合题目,该数前一位则是小于等于数p的最大数,因为set集合会自动从小到大排序。
2.通过代码
#include<iostream>
#include<math.h>
#include<set>
using namespace std;
int main()
{
set<int> a;
set<int>::iterator x,y;
a.insert(2147483640);
a.insert(-2147483640);
int n,ans=0,p;
cin>>n;
while(n--)
{
cin>>p;
if(a.size()==2)
{
a.insert(p);
ans+=p;
}
else
{
x=a.lower_bound(p);
if(*x!=p)
{
y=x;
y--;
ans+=min(abs(*y-p),abs(*x-p));
a.insert(p);
}
}
}
cout<<ans;
return 0;
}