题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1588

简单Splay。但用双向链表做。很好的思路。

1.(离线)按值排序,记下pre和nxt的位置;2.倒序,为了算完把它删掉以不影响前面。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,INF=1e7;
int n,a[N],pre[N],nxt[N],ans;
struct Node{
int val,bh;
}tp[N];
bool cmp(Node a,Node b){return a.val<b.val;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]),tp[i].val=a[i],tp[i].bh=i;
sort(tp+,tp+n+,cmp);
for(int i=;i<=n;i++)pre[tp[i].bh]=tp[i-].bh,nxt[tp[i].bh]=tp[i+].bh?tp[i+].bh:n+;
a[n+]=INF;a[]=-INF;
for(int i=n;i>;i--)
{
ans+=min(a[i]-a[pre[i]],a[nxt[i]]-a[i]);
pre[nxt[i]]=pre[i];nxt[pre[i]]=nxt[i];
}
printf("%d",ans+a[]);
return ;
}

最新文章

  1. ubuntu 12.04下zmap安装
  2. 为窗体设置背景图片-UI界面编辑器(SkinStudio)教程
  3. androidactivity与webview结合
  4. Unity3D研究院之静态自动检查代码缺陷与隐患
  5. Copy-VMFile
  6. Java程序实现导出Excel,支持IE低版本
  7. c++:参数型别的推导
  8. hdu_4742_Pinball Game 3D(cdq分治+树状数组)
  9. RabbitMQ 默认端口号
  10. I2S协议
  11. linux下mongodb安装、服务器、客户端、备份、账户命令
  12. 快速失败(fail-fast)和安全失败(fail-safe)的区别
  13. bzoj千题计划312:bzoj2119: 股市的预测(后缀数组+st表)
  14. EL 快速开始
  15. 转:[大数据竞赛]协同过滤在这个问题上是否work
  16. 加速安装 Sharepoint 2013 SP1
  17. markdown 测试代码
  18. Linux开机启动文件rc.local无法执行怎么办?
  19. 【Discriminative Localization】Learning Deep Features for Discriminative Localization 论文解析(转)
  20. Mac Android8.0源码编译笔记

热门文章

  1. 使用jQuery插件jRemoteValidate进行远程ajax验证,可以自定义返回的信息
  2. C#中Abstract和Virtua笔记,知识
  3. Mac上安装第三方应用显示包资源破坏解决办法
  4. widow系统 LuaForWindows,安装 luasocket
  5. iOS开发之解决CocoaPods中“.h”头文件找不到的问题,简单粗暴的方法
  6. angular 动态修改 ng-bind-html
  7. XCOde 5 的界面布局一些新特性
  8. iOS-----AVFoundation框架的功能详解
  9. vue中使用less
  10. 【剑指offer】找出数组中任意一个重复的数字,C++实现