这一版的主要内容是set。
定义方法:
set<int>s
几个成员函数:
begin() //返回set容器的第一个元素
end() //返回set容器的最后一个元素
clear() //删除set容器中的所有的元素
empty() //判断set容器是否为空
max_size() //返回set容器可能包含的元素最大个数
size() //返回当前set容器中的元素个数
rbegin //返回的值和end()相同
rend() //返回的值和rbegin()相同
多说无益,直接上代码。
传送门:http://www.cqoi.net:2012/problem.php?id=2805
code:
#include<cstdio>
#include<set>
#define INF (1<<29)
using namespace std;
inline int abs(int a){return a>0?a:-a;}
inline int min(int a,int b){return a<b?a:b;}
set<int>s;
int n,ans;
int main()
{
int i,a;
scanf("%d",&n);
set<int>::iterator it;
for(i=1;i<=n;i++)
{
int pre=INF,next=INF;
scanf("%d",&a);
it=s.find(a);
if(it!=s.end())continue;
s.insert(a);
if(i==1)
{
ans+=a;
continue;
}
it=s.find(a);
if(it!=s.begin())
{
--it;
pre=*it;
++it;
}
if(++it!=s.end())
{
next=*it;
}
ans+=min(abs(next-a),abs(pre-a));
}
printf("%d\n",ans);
}