题目链接

  1. //模板吧
  2. #include<cstdio>
  3. #include<cctype>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=40000,INF=1e8;
  7. int n,size,root,sz[N],cnt[N],t[N],son[N][2],fa[N];
  8. inline int read()
  9. {
  10. int now=0,f=1;register char c=getchar();
  11. for(;!isdigit(c);c=getchar())
  12. if(c=='-') f=-1;
  13. for(;isdigit(c);now=now*10+c-'0',c=getchar());
  14. return now*f;
  15. }
  16. inline void Update(int rt)
  17. {
  18. sz[rt]=sz[son[rt][0]]+sz[son[rt][1]]+1;
  19. }
  20. void Rotate(int x,int &rt)
  21. {
  22. int a=fa[x],b=fa[a],l=(son[a][1]==x),r=l^1;
  23. if(a==rt) rt=x;
  24. else son[b][son[b][1]==a]=x;
  25. fa[a]=x, fa[x]=b, fa[son[x][r]]=a,
  26. son[a][l]=son[x][r], son[x][r]=a;
  27. Update(a),Update(x);
  28. }
  29. void Splay(int x,int &rt)
  30. {
  31. int a,b;
  32. while(x!=rt)
  33. {
  34. a=fa[x], b=fa[a];
  35. if(a!=rt)
  36. {
  37. if((son[a][0]==x)^(son[b][0]==a)) Rotate(x,rt);
  38. else Rotate(a,rt);
  39. }
  40. Rotate(x,rt);
  41. }
  42. }
  43. void Insert(int k,int v)
  44. {
  45. int f=0;
  46. while(k && t[k]!=v) f=k,k=son[k][v>t[k]];
  47. // if(k) ++cnt[k];
  48. if(k) ;
  49. else
  50. {
  51. k=++size, sz[k]=/*cnt[k]=*/1, t[k]=v, fa[k]=f;
  52. if(f) son[f][v>t[f]]=k;
  53. }
  54. Splay(k,root);
  55. }
  56. void Get_Rank(int k,int v)
  57. {
  58. // if(!k) return;
  59. while(son[k][v>t[k]] && t[k]!=v) k=son[k][v>t[k]];
  60. Splay(k,root);
  61. }
  62. int Find(int v,int f)
  63. {
  64. Get_Rank(root,v);
  65. if(t[root]==v||(t[root]<v && !f)||(t[root]>v && f)) return root;
  66. int k=son[root][f];
  67. while(son[k][f^1]) k=son[k][f^1];
  68. return k;
  69. }
  70. int main()
  71. {
  72. n=read();
  73. Insert(root,-INF), Insert(root,INF);
  74. int a=read();long long res=a;
  75. Insert(root,a);
  76. for(int i=1;i<n;++i)
  77. {
  78. a=read();
  79. int p=Find(a,0),p2=Find(a,1);
  80. res+=min(a-t[p],t[p2]-a);
  81. // printf("%d %d %d delta:%d\n",a,t[p],t[p2],min(a-t[p],t[p2]-a));
  82. Insert(root,a);
  83. }
  84. printf("%lld",res);
  85. return 0;
  86. }

洛谷.2234.[HNOI2002]营业额统计(Splay)的更多相关文章

  1. 洛谷P2234 [HNOI2002] 营业额统计 [splay]

    题目传送门 营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天 ...

  2. 洛谷 2234 [HNOI2002]营业额统计——treap(入门)

    题目:https://www.luogu.org/problemnew/show/P2234 学习了一下 treap 的写法. 学习材料:https://blog.csdn.net/litble/ar ...

  3. 洛谷P2234 [HNOI2002]营业额统计

    题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...

  4. 洛谷 P2234 [HNOI2002]营业额统计

    题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...

  5. 洛谷—— P2234 [HNOI2002]营业额统计

    https://www.luogu.org/problem/show?pid=2234 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业 ...

  6. [洛谷P2234][HNOI2002] 营业额统计 - Treap

    Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额. ...

  7. 洛谷P2234 [HNOI2002]营业额统计(01Tire树)

    题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...

  8. BZOJ1588 HNOI2002 营业额统计 [Splay入门题]

    [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4128  Solved: 1305 Description 营业额统计 ...

  9. 1588: [HNOI2002]营业额统计 (splay tree)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 5783  Solved: 1859[Submit][Stat ...

随机推荐

  1. 【windows核心编程】远程线程DLL注入

    15.1 DLL注入 目前公开的DLL注入技巧共有以下几种: 1.注入表注入 2.ComRes注入 3.APC注入 4.消息钩子注入 5.远线程注入 6.依赖可信进程注入 7.劫持进程创建注入 8.输 ...

  2. js 当前时区

    function formatDateTime(formatDate){ //13位时间戳,java js. (php时间戳为10位) var returnDate; if(formatDate == ...

  3. classfication中使用图像金字塔和sliding windows提高准确率

    之前对imagenet的预训模型进行finetune,找出了很多样本选择时的注意事项,当时在测试如下这张照片时,效果不好,我认为是物体过小造成的,因此尝试使用图像金字塔的方法: 当时结果如下: 一开始 ...

  4. Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列

    Oracle把逗号分割的字符串转换为可放入in的条件语句的字符数列   前台传来的字符串:'589,321' SELECT*FROM TAB_A T1 WHERE  T1.CODE  IN ( SEL ...

  5. was监控脚本编写时的注意点

    server = AdminConfig.getid('/Cell:myCell012/Node:myNode12/Server:server1/') 不可缺少斜杠,不然会报错 如果没法登录管理控制台 ...

  6. Advanced Installer 14.9 – WPF或winform应用程序打包成exe文件

    Advanced Installer14.9 下载地址:https://pan.baidu.com/s/1uj2QcxWcpGdqsjAinNPIAw 提取码:sa3r  选择Visual Studi ...

  7. Log4Net 无法写入到SqlServer

    直接进入正题: 今天在测试使用Log4Net写入到数据库的时候,发现一直无法写入到数据库中,而且程式也没有报任何错误. 配置信息如下: <appender name="AdoNetAp ...

  8. CentOS 6.5环境使用ansible剧本自动化部署Corosync + pacemaker环境及corosync常用配置详解

    环境说明: 192.168.8.39 node2.chinasoft.com 192.168.8.42 node4.chinasoft.com 192.168.8.40 ansible管理服务器 19 ...

  9. centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享

    FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP.这样FTP客户端和服务器建立 ...

  10. Servlet注释与部署描述符

    值得注意的是,部署描述符优先于注释.换句话说,部署描述符覆盖通过注释机制所规定的配置信息.Web 部署描述符的 3.0 版本在 web-app 元素上包含一种名为 metadata-complete ...