裸平衡树,恢复手感用的

  1. //By BLADEVIL
  2. var
  3. n :longint;
  4. i :longint;
  5. x, y :longint;
  6. t, tot :longint;
  7. key, s, left, right :array[..] of longint;
  8. ft :longint;
  9. a, b :longint;
  10. ans :longint;
  11.  
  12. procedure right_rotate(var t:longint);
  13. var
  14. k :longint;
  15. begin
  16. k:=left[t];
  17. left[t]:=right[k];
  18. right[k]:=t;
  19. s[k]:=s[t];
  20. s[t]:=s[left[t]]+s[right[t]]+;
  21. t:=k;
  22. end;
  23.  
  24. procedure left_rotate(var t:longint);
  25. var
  26. k :longint;
  27. begin
  28. k:=right[t];
  29. right[t]:=left[k];
  30. left[k]:=t;
  31. s[k]:=s[t];
  32. s[t]:=s[left[t]]+s[right[t]]+;
  33. t:=k;
  34. end;
  35.  
  36. procedure maintain(var t:longint;flag:boolean);
  37. begin
  38. if not flag then
  39. if s[left[left[t]]]>s[right[t]] then
  40. right_rotate(t) else
  41. if s[right[left[t]]]>s[right[t]] then
  42. begin
  43. left_rotate(left[t]);
  44. right_rotate(t);
  45. end else exit
  46. else
  47. if s[right[right[t]]]>s[left[t]] then
  48. left_rotate(t) else
  49. if s[left[right[t]]]>s[left[t]] then
  50. begin
  51. right_rotate(right[t]);
  52. left_rotate(t);
  53. end else exit;
  54. maintain(left[t],false);
  55. maintain(right[t],true);
  56. maintain(t,true);
  57. maintain(t,false);
  58. end;
  59.  
  60. procedure insert(var t:longint; v:longint);
  61. begin
  62. if t= then
  63. begin
  64. inc(tot);
  65. t:=tot;
  66. key[t]:=v;
  67. s[t]:=;
  68. left[t]:=;
  69. right[t]:=;
  70. end else
  71. begin
  72. inc(s[t]);
  73. if v<key[t] then insert(left[t],v) else insert(right[t],v);
  74. maintain(t,v>=key[t]);
  75. end;
  76. end;
  77.  
  78. function delete(var t:longint; v:longint):longint;
  79. begin
  80. dec(s[t]);
  81. if (v=key[t]) or (v<key[t]) and (left[t]=) or (v>key[t]) and (right[t]=) then
  82. begin
  83. delete:=key[t];
  84. if (left[t]=) or (right[t]=) then
  85. t:=left[t]+right[t] else
  86. key[t]:=delete(left[t],key[t]+);
  87. end else
  88. if v<key[t] then delete:=delete(left[t],v) else delete:=delete(right[t],v);
  89. end;
  90.  
  91. function pre(var t:longint; v:longint):longint;
  92. begin
  93. if t= then exit(-);
  94. if v<key[t] then pre:=pre(left[t],v) else
  95. begin
  96. pre:=pre(right[t],v);
  97. if pre=- then pre:=key[t];
  98. end;
  99. end;
  100.  
  101. function succ(var t:longint; v:longint):longint;
  102. begin
  103. if t= then exit(-);
  104. if key[t]<=v then succ:=succ(right[t],v) else
  105. begin
  106. succ:=succ(left[t],v);
  107. if succ=- then succ:=key[t];
  108. end;
  109. end;
  110.  
  111. begin
  112. read(n);
  113. ans:=;
  114. t:=; tot:=; s[t]:=;
  115.  
  116. for i:= to n do
  117. begin
  118. read(x,y);
  119. if x=ft then insert(t,y) else
  120. if s[t]= then
  121. begin
  122. ft:=x;
  123. insert(t,y);
  124. end else
  125. begin
  126. a:=pre(t,y); b:=succ(t,y);
  127. if a=- then a:=-maxlongint div ;
  128. if b=- then b:=maxlongint div ;
  129. if abs(b-y)<abs(y-a) then
  130. begin
  131. ans:=(ans+abs(b-y)) mod ;
  132. b:=delete(t,b);
  133. end else
  134. begin
  135. ans:=(ans+abs(y-a)) mod ;
  136. a:=delete(t,a);
  137. end;
  138. end;
  139. end;
  140. writeln(ans);
  141.  
  142. end.

bzoj 1208 HNOI2004宠物收养所 平衡树的更多相关文章

  1. BZOJ 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7514  Solved: 2982[Submit][Sta ...

  2. bzoj 1208: [HNOI2004]宠物收养所 set

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 7328  Solved: 2892[Submit][Sta ...

  3. BZOJ 1208: [HNOI2004]宠物收养所(BST)

    本来想先用set写一遍,再自己写个splay或treap,不过用set过了之后就懒得去写了....以后有空再来写吧..(不会有空的吧= = ------------------------------ ...

  4. bzoj 1208: [HNOI2004]宠物收养所 (Treap)

    链接:  https://www.lydsy.com/JudgeOnline/problem.php?id=1208 题面: 1208: [HNOI2004]宠物收养所 Time Limit: 10 ...

  5. BZOJ 1208: [HNOI2004]宠物收养所 SET的妙用

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4902  Solved: 1879 题目连接 http:/ ...

  6. Bzoj 1208: [HNOI2004]宠物收养所(splay)

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...

  7. BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 题意: 有一个宠物收养所,在接下来一段时间内会陆续有一些宠物进到店里,或是一些人来领 ...

  8. BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题

    题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...

  9. 1208: [HNOI2004]宠物收养所

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 12030 Solved: 4916 Description ...

随机推荐

  1. 【连载】Bootstrap开发漂亮的前端界面之自定义右键菜单

    连载: 1<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体 ...

  2. Google序列化库FlatBuffers 1.1发布,及与protobuf的比较

    个人总结: FlatBuffer相对于Protobuffer来讲,优势如下: 1. 由于省去了编解码的过程,所以从速度上快于Protobuffer,个人测试结果100w次编解码,编码上FlatBuff ...

  3. 第二十五篇 hashlib模块(* *)

    用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 加密复杂程度: SHA1  ...

  4. Jmeter从文件中读取参数值

    1. 通过函数助手,从本地文件中取值选项->函数助手对话框->选择__CSVRead函数->调用参数其中,函数助手对话框中,第一栏填写本地文件所在地址,第二栏写需要入参的值,有点类似 ...

  5. 深挖 NGUI 基础 之UICamera (二)

    一.UI Camera作用 UICamera需要挂载在摄像机上才能发挥作用 UICamera仅负责 发送NGUI 事件 到 脚本所附加的摄像机中看得到的对象,比如我自定义了NGUI层(在Inspect ...

  6. 12-Mysql数据库----多表查询

    本节重点: 多表连接查询 符合条件连接查询 子查询 准备工作:准备两张表,部门表(department).员工表(employee) create table department( id int, ...

  7. golang交叉编译笔记

    GOOS:目标平台的操作系统(darwin.freebsd.linux.windows) GOARCH:目标平台的体系架构(386.amd64.arm) Mac 下编译 Linux 和 Windows ...

  8. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

  9. tensorflow Importing Data

    tf.data API可以建立复杂的输入管道.它可以从分布式文件系统中汇总数据,对每个图像数据施加随机扰动,随机选择图像组成一个批次训练.一个文本模型的管道可能涉及提取原始文本数据的符号,使用查询表将 ...

  10. 使用ListOperations操作redis

    使用ListOperations对象操作redis list: 方法 c参数 s说明   List<V> range(K key, long start, long end); K key ...