2013-09-21 16:50

  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.

wiki1285的更多相关文章

随机推荐

  1. CDateTimeUI类源码分析

    CDateTimeUI是duilib里选择日期的控件,继承于CLabelUI控件,用于记录已经选择的日期,选择控件则是调用win32的日期选择控件. CDateTimeUI包含两个类,一个是CDate ...

  2. adb常用命令(手机测试)

                                                   ADB安装与常用命令详解 一.ADB意义 adb的全称为Android Debug Bridge,就是起到 ...

  3. python接口测试(一)——http请求及token获取

    使用python对当前的接口进行简单的测试 1.接口测试是针对软件对外提供服务得接口得输入输出进行得测试,验证接口功能与接口描述文档得一致性 返回结果可以为字符串,json,xml等 2.接口的请求方 ...

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

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

  5. Laxcus大数据分布计算演示实例

    Laxcus大数据管理系统提供了基于Diffuse/Converge分布算法的计算能力.算法的具体介绍详见<Laxcus:大数据处理系统>一文.本图展示了在集群环境下的随机数产生.排序.显 ...

  6. 树莓派搭建 Hexo 博客(二)

    Hexo 一个开源的博客框架,本文记录了一下在树莓派上搭建 Hexo 博客的过程. 上一篇介绍了 Hexo 的配置,现在网站已经能在本地访问了,也能通过 hexo generate 命令生成静态界面 ...

  7. windows下git hub的GUI软件配置与使用

    转载自:http://www.cnblogs.com/haore147/p/3618930.html   1. 安装两个软件 1 2 1. git的命令行程序--git for windows:htt ...

  8. 程序运行bug查看

    1.左击计算机进入管理,点击windows日志,查看程序信息. 可以方便看到报错信息.

  9. JVM高级内存优化面试

    Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机. JVM内存分布程序计数器:是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指 ...

  10. lintcode-96-链表划分

    96-链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2-&g ...