营业额统计

思路:

  每次,插入一个点;

  然后找前驱后继;

来,上代码:

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. #define maxn 33000
  8. #define INF 0x7fffffff
  9.  
  10. struct TreeNodeType {
  11. int w,key,opi,size,ch[];
  12. };
  13. struct TreeNodeType tree[maxn];
  14.  
  15. int n,root,tot,X,ans;
  16.  
  17. inline void updata(int now)
  18. {
  19. tree[now].size=tree[now].w;
  20. if(tree[now].ch[]) tree[now].size+=tree[tree[now].ch[]].size;
  21. if(tree[now].ch[]) tree[now].size+=tree[tree[now].ch[]].size;
  22. }
  23.  
  24. inline int getson(int now)
  25. {
  26. return tree[tree[now].opi].ch[]==now;
  27. }
  28.  
  29. inline void rotate(int now)
  30. {
  31. int opi=tree[now].opi,fopi=tree[opi].opi,pos=getson(now);
  32. tree[opi].ch[pos]=tree[now].ch[pos^];
  33. tree[tree[now].ch[pos^]].opi=opi;
  34. tree[now].ch[pos^]=opi;
  35. tree[now].opi=fopi;
  36. tree[opi].opi=now;
  37. if(fopi) tree[fopi].ch[tree[fopi].ch[]==opi]=now;
  38. updata(opi),updata(now);
  39. }
  40.  
  41. inline void splay(int now)
  42. {
  43. for(int opi;opi=tree[now].opi;rotate(now))
  44. {
  45. if(tree[opi].opi) rotate(getson(now)==getson(opi)?opi:now);
  46. }
  47. root=now;
  48. }
  49.  
  50. inline void insert()
  51. {
  52. if(!root)
  53. {
  54. tree[++tot].key=X;
  55. tree[tot].opi=;
  56. tree[tot].w=tree[tot].size=;
  57. tree[tot].ch[]=tree[tot].ch[]=;
  58. root=tot;
  59. }
  60. else
  61. {
  62. int now=root,opi=;
  63. while()
  64. {
  65. if(tree[now].key==X)
  66. {
  67. tree[now].w++;
  68. tree[now].size++;
  69. splay(now);
  70. break;
  71. }
  72. opi=now,now=tree[now].ch[X>tree[now].key];
  73. if(!now)
  74. {
  75. tree[++tot].key=X;
  76. tree[tot].opi=opi;
  77. tree[tot].w=tree[tot].size=;
  78. tree[tot].ch[]=tree[tot].ch[]=;
  79. tree[opi].ch[X>tree[opi].key]=tot;
  80. splay(tot);
  81. break;
  82. }
  83. }
  84. }
  85. }
  86.  
  87. inline int pre()
  88. {
  89. if(tree[root].w>) return tree[root].key;
  90. int now=tree[root].ch[];
  91. if(now==) return INF;
  92. while(tree[now].ch[]) now=tree[now].ch[];
  93. return tree[now].key;
  94. }
  95.  
  96. inline int suc()
  97. {
  98. int now=tree[root].ch[];
  99. if(now==) return INF;
  100. while(tree[now].ch[]) now=tree[now].ch[];
  101. return tree[now].key;
  102. }
  103.  
  104. inline void in(int &now)
  105. {
  106. register int if_z=;now=;
  107. register char Cget=getchar();
  108. while(Cget>''||Cget<'')
  109. {
  110. if(Cget=='-') if_z=-;
  111. Cget=getchar();
  112. }
  113. while(Cget>=''&&Cget<='')
  114. {
  115. now=now*+Cget-'';
  116. Cget=getchar();
  117. }
  118. now*=if_z;
  119. }
  120.  
  121. int main()
  122. {
  123. in(n),in(X);
  124. ans=X,n--,insert();
  125. while(n--)
  126. {
  127. in(X),insert();
  128. int p=pre(),s=suc();
  129. ans+=min(abs(X-p),abs(s-X));
  130. }
  131. cout<<ans;
  132. return ;
  133. }

AC日记——营业额统计 codevs 1296 (splay版)的更多相关文章

  1. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计(STL,二分)

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计(STL,二分) Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一 ...

  2. AC日记——营业额统计 1296 codevs

    1296 营业额统计 2002年  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description Tiger ...

  3. 1588. [HNOI2002]营业额统计【平衡树-splay 或 线段树】

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

  4. bzoj 1588 [HNOI2002] 营业额统计 链表和Splay

    来自HNOI 2002营业额的统计一题,这题以前是用链表水过的,最近看见许多splay的题,赶紧张一下知识. 题目大意就是对于一个序列,输出每个元素与它之前元素的差的最小值的和.先说链表的方法吧. 大 ...

  5. AC日记——约瑟夫问题 codevs 1282

    1282 约瑟夫问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Description 有编号从1到N的N个小 ...

  6. AC日记——数字统计 openjudge 1.5 41

    41:数字统计 总时间限制:  1000ms 内存限制:  65536kB 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 22],数字2在数2中出现了1次, ...

  7. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  8. AC日记——砍树 codevs 1388

    1388 砍树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 伐木工人米尔科需要砍倒M米长的木 ...

  9. AC日记——元素查找 codevs 1230

    1230 元素查找  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给出n个正整数,然后有 ...

随机推荐

  1. 描述符应用 -- 让python变成一个强类型的语言

    众所周知,python是一门弱类型的语言,变量可以随意赋值成任意类型,但是通过描述符,我们可以把数据变成强类型的. 我们为数据设置数据描述符,因为数据描述的优先级大于实例属性,所以在给数据赋值的时候会 ...

  2. String使用方法详解

    标准c++中string类函数介绍 注意不是CString 之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够.字符串长度等等,而且作 ...

  3. TI C64X+通用库函数使用手册

    在使用前,当知悉以下几点: 函数进程由手动汇编而成,已充分发挥器件效率.同时TI对外提供C和线性汇编代码 对于个人一些特殊应用,DSPLIB可能会带来额外的cycle消耗 TI DSPLIB依平台和时 ...

  4. Python中str、list、numpy分片操作

    在Python里,像字符串(str).列表(list).元组(tupple)和这类序列类型都支持切片操作 对对象切片,s是一个字符串,可以通过类似数组索引的方式获取字符串中的字符,同时也可以用s[a: ...

  5. Falsk

    flask: 1.配置文件的几种方式: 1.app.config['DEBUG'] =True 2.app.config.from_pyfile("setting.py") 3.a ...

  6. loj2291 「THUSC 2016」补退选

    ref pkusc 快到了,做点 thusc 的题涨涨 rp-- #include <iostream> #include <cstring> #include <cst ...

  7. Python抓取视频内容

    Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...

  8. 试水新的Angular4 HTTP API

    本文来自网易云社区 作者:梁月康 原文:https://netbasal.com/a-taste-from-the-new-angular-http-client-38fcdc6b359b Angul ...

  9. leetcode 【 Search for a Range 】python 实现

    题目: Given a sorted array of integers, find the starting and ending position of a given target value. ...

  10. 成都大学CTF 网络攻防演练平台 WP

    web1 输入框那里鼠标右键,审查元素,删除maxlength web2 http://ctf.cdusec.org:8082/web2/?cdusec=tql web3 同上,用火狐hackbar或 ...