题目:https://www.luogu.org/problemnew/show/P2234

学习了一下 treap 的写法。

学习材料:https://blog.csdn.net/litble/article/details/78934306

     http://memphis.is-programmer.com/posts/46317.html

     https://www.cnblogs.com/AKMer/p/9981274.html

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<ctime>
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
int Mn(int a,int b){return a<b?a:b;}
const int N=,M=1e9;
int n,rt,tot,vl[N],c[N][],rd[N],ans;
void rotate(int &cr,bool d)
{
int v=c[cr][!d];
c[cr][!d]=c[v][d]; c[v][d]=cr; cr=v;
}
void ins(int &cr,int k)
{
if(!cr){cr=++tot; vl[cr]=k; rd[cr]=rand()%M; return;}
int d;
if(k<=vl[cr]) d=, ins(c[cr][],k);
else d=, ins(c[cr][],k);
if(rd[c[cr][d]]>rd[cr])rotate(cr,!d);
}
int fnd_pr(int cr,int k)
{
if(!cr)return N;
if(vl[cr]<=k)
{
int d=fnd_pr(c[cr][],k);
return d==N?cr:d;
}
return fnd_pr(c[cr][],k);
}
int fnd_sc(int cr,int k)
{
if(!cr)return N;
if(vl[cr]>=k)
{
int d=fnd_sc(c[cr][],k);
return d==N?cr:d;
}
return fnd_sc(c[cr][],k);
}
int main()
{
srand(time()); n=rdn();
for(int i=,d;i<=n;i++)
{
d=rdn();
if(i==)ans=d;
else
{
int u=fnd_pr(rt,d), v=fnd_sc(rt,d);
if(u==N)ans+=vl[v]-d;
else if(v==N)ans+=d-vl[u];
else ans+=Mn(vl[v]-d,d-vl[u]);
}
ins(rt,d);
}
printf("%d\n",ans); return ;
}

最新文章

  1. 【系统篇】从int 3探索Windows应用程序调试原理
  2. 利用免费的Spire.XLS控件制作Excel报表
  3. js控制只允许输入数字
  4. leetcode:Valid Parentheses
  5. Fragement
  6. 在ubuntu下真机调试android程序出现设备没有访问权限
  7. 整合spring roo,maven,mybatis,spring-flex,blazeds,mysql
  8. GridLayoutManager
  9. plsql常用快捷键
  10. django 学习-3 模板变量
  11. HTML颜色编码
  12. m2e使用问题——发布web项目时lib目录下的jar包未发布
  13. setInterval(code, time)中code传递参数办法
  14. SpringMVC: web.xml中声明DispatcherServlet时一定要加入load-on-startup标签
  15. 避免docker异常重启容器挂掉的解决方法
  16. UESTC1013-我的魔法栈-模拟/排列组合
  17. 目标检测——IoU 计算
  18. linux 变量定义
  19. 使用Android-studio开发移动app与weex结合开发详细步骤
  20. python3 tkinter 桌面软件教程

热门文章

  1. oracle 12c 警告日志位置
  2. Linux:进程
  3. 配置JAVA 环境变量
  4. jQuery中extend()实现原理
  5. 2017ICPC北京赛区网络赛 Minimum(数学+线段树)
  6. DocumentFragment --更快捷操作DOM的途径
  7. OSPF路由协议(一)
  8. requestAnimationFrame结束demo
  9. python调用caffe环境配置
  10. 使用rsync, 向另外一台服务器同步目录和文件的脚本