懒得复制,戳我戳我

Solution:

  • \(Splay\)板子题,注意可以选择相等大小

Code:

  1. //It is coded by Ning_Mew on 4.10
  2. #include<bits/stdc++.h>
  3. #define ls(x) node[x].ch[0]
  4. #define rs(x) node[x].ch[1]
  5. #define fa(x) node[x].fa
  6. #define root node[0].ch[1]
  7. using namespace std;
  8. const int maxn=32800,INF=1e9+7;
  9. int n,tot=0,ans=0;
  10. struct Node{
  11. int fa,ch[2],val,cnt,size;
  12. }node[maxn];
  13. void update(int x){node[x].size=node[ls(x)].size+node[rs(x)].size+node[x].cnt;}
  14. void connect(int x,int fa,int how){node[x].fa=fa;node[fa].ch[how]=x;}
  15. int ident(int x){return x==node[fa(x)].ch[0]?0:1;}
  16. void rorate(int x){
  17. int Y=fa(x),R=fa(Y);int Yson=ident(x),Rson=ident(Y);
  18. connect(node[x].ch[Yson^1],Y,Yson);
  19. connect(Y,x,Yson^1);
  20. connect(x,R,Rson);
  21. update(Y);update(x);return;
  22. }
  23. void Splay(int x,int goal){
  24. int to=fa(goal);
  25. while(fa(x)!=to){
  26. if(fa(fa(x))==to)rorate(x);
  27. else if(ident(x)==ident(fa(x)))rorate(fa(x)),rorate(x);
  28. else rorate(x),rorate(x);
  29. }
  30. }
  31. int newnode(int x,int fa){
  32. node[++tot].val=x;node[tot].size=node[tot].cnt=1;node[tot].fa=fa;return tot;
  33. }
  34. void ins(int x){
  35. int now=root;
  36. if(!now){newnode(x,0);root=tot;return;}
  37. else{
  38. while(1){
  39. node[now].size++;
  40. if(node[now].val==x){node[now].cnt++;Splay(now,root);return;}
  41. int nxt=x<node[now].val?0:1;
  42. if(!node[now].ch[nxt]){
  43. int p=newnode(x,now);
  44. node[now].ch[nxt]=p;Splay(p,root);return;
  45. }
  46. now=node[now].ch[nxt];
  47. }
  48. }
  49. }
  50. int lower(int x){
  51. int now=root,ans=-INF;
  52. while(now){
  53. if(node[now].val<x)ans=max(ans,node[now].val);
  54. if(node[now].val==x&&node[now].cnt!=1)ans=max(ans,node[now].val);
  55. int nxt=x<=node[now].val?0:1;
  56. now=node[now].ch[nxt];
  57. }return ans;
  58. }
  59. int upper(int x){
  60. int now=root,ans=INF;
  61. while(now){
  62. if(node[now].val>x)ans=min(ans,node[now].val);
  63. if(node[now].val==x&&node[now].cnt!=1)ans=min(ans,node[now].val);
  64. int nxt=x<node[now].val?0:1;
  65. now=node[now].ch[nxt];
  66. }return ans;
  67. }
  68. int main(){
  69. scanf("%d",&n);
  70. int x;
  71. for(int i=1;i<=n;i++){
  72. scanf("%d",&x); ins(x);
  73. //cout<<"ins Finished"<<endl;
  74. if(i==1)ans=x;
  75. else {
  76. int up=upper(x),low=lower(x),box=INF;
  77. if(up!=INF)box=min(box,abs(up-x));
  78. if(low!=-INF)box=min(box,abs(low-x));
  79. //cout<<up<<' '<<low<<' '<<box<<endl;
  80. ans+=box;
  81. }
  82. //cout<<"ans changed"<<endl;
  83. }
  84. printf("%d\n",ans);
  85. return 0;
  86. }

【题解】 [HNOI2002]营业额统计 (Splay)的更多相关文章

  1. bzoj1588: [HNOI2002]营业额统计(splay)

    1588: [HNOI2002]营业额统计 题目:传送门 题解: 复习splay所以来刷个水... 题目描述不是特别清楚:应该是找第i天以前一个最小的营业额和第i天做差的最小值作为第i天的最小波动值 ...

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

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

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

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

  4. [HNOI2002]营业额统计 Splay tree入门题

    题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1588 1588: [HNOI2002]营业额统计 Time Limit: 5 Sec   ...

  5. BZOJ1588 [HNOI2002]营业额统计 splay模板

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16189  Solved: 6482 [Submit][S ...

  6. Bzoj 1588: [HNOI2002]营业额统计(splay)

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...

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

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

  8. HNOI2002 营业额统计 [Splay]

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

  9. [bzoj1588][HNOI2002]营业额统计——splay

    题目大意 你被要求编写一个数据结构,支援以下操作,操作在线. 插入一个元素 查询一个元素与之前插入元素的最小差值. 题解 一道模板题.我是写了一个pre和succ函数水过的.1A,比较高兴. 代码 # ...

  10. bzoj1588: [HNOI2002]营业额统计 splay瞎写

    最近各种瞎写数论题,感觉需要回顾一下数据结构 写一发splay冷静一下(手速过慢,以后要多练练) 用splay是最直接的方法,但我感觉离散一波应该可以做出来(没仔细想过) 现在没有很追求代码优美,感觉 ...

随机推荐

  1. php安装后,再添加模块pdo_mysql,mysqli

    windows下,是动态链接库.dll,linux下是.so. linux下,假设php安装在/usr/local/php,php的源码包放在/usr/local/php-5.6.15 去php源码包 ...

  2. 在 R 中估计 GARCH 参数存在的问题

    目录 在 R 中估计 GARCH 参数存在的问题 GARCH 模型基础 估计 GARCH 参数 fGarch 参数估计的行为 结论 译后记 在 R 中估计 GARCH 参数存在的问题 本文翻译自< ...

  3. c# speech 文本转语言

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  4. 20155226 《网络对抗》exp6信息搜集与漏洞扫描

    20155226 <网络对抗>exp6信息搜集与漏洞扫描 实验后回答问题 哪些组织负责DNS,IP的管理? 目前域名机构主要包括ICANN理事会和CNNIC. Internet 域名与地址 ...

  5. 实践:IIS7下访问ashx页面,显示404

    问题描述 1.路径什么的都对,这方面的原因就不要想了 2.在我的电脑上可以,在同事的电脑上不可以 方案1:未注册ashx的处理应用程序 也就是不知道IIS不知道用什么应用程序处理ashx文件,解决办法 ...

  6. GIT命令基本使用

    记录摘选自廖雪峰的官方网站归纳总结 1.centos下安装git [root@cdw-lj ~]# yum install git 2.配置用户名以及邮箱 [root@cdw-lj opt]# git ...

  7. springboot打包成war后部署项目出现异常 LifecycleException: Failed to start component

    完整异常:org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].Sta ...

  8. ECMAScript6——Set数据结构

    /** * 数据结构 Set */ // ----------------------------------------------------- /** * 集合的基本概念:集合是由一组无序且唯一 ...

  9. IT高管和易筋经的故事

    老板是我非常敬重的前领导之一,他的一些管理风格,也影响了后来我对技术团队的管理. 理想企业 什么是程序员理想的IT企业?公司里面有良好的同事关系,合理的产品需求和开发进度,最好老板懂点编程,这样公司更 ...

  10. Easy Pipeline,一种轻量级的Python Pipeline库

    嗯,很久没有写博客了,最近的工作都是偏开发性质的,以至于没有时间对自己感兴趣的领域进行探索,感觉个人的成长停滞了一些.如何在枯燥的工作中,提取出有助于自己成长的养分,对于每个人来说都是不小的考验. 这 ...