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. Android4.0系统以上程序不出现菜单键的问题解决

    去掉targetSdkVersion 或改为targetSdkVersion =13或更小.. 不改targetSdkVersion的办法:在onCreate() 里setContentView()之 ...

  2. Git创建project

    1.登录创建新仓库 命名 2.https://gitforwindows.org/  下载git的windows客户端,输入git查看是否成功 3.创建文件夹,写内容并查看,和linux指令一样 4. ...

  3. 洛谷P1379八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...

  4. LeetCode 全解(bug free 训练)

    1.Two Sum Given an array of integers, return indices of the two numbers such that they add up to a s ...

  5. 机器学习 (二) 多变量线性回归 Linear Regression with Multiple Variables

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...

  6. 学习bash——管道命令

    摘要:管道命令概述.常见管道命令的使用(cut/grep.sort/wc/uniq.tee.tr/col/join/paste/expand.xargs.减号-) 一.概述 命令执行完会在屏幕上打印相 ...

  7. 软工实践 - 第二十六次作业 Beta 冲刺(4/7)

    队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10124816.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...

  8. scp源码浅析

    背景: 经常使用scp传文件,发现它真的很给力,好奇心由来已久! 恰好接到一个移植SSH服务到专有网络(非IP网络)的小任务,完成工作又能满足好奇心,何乐而不为! 我只从源码浅浅的分析一下,后续有更多 ...

  9. windows curl 命令

    windows 64 curl 命令的使用 https://blog.csdn.net/qq_27093465/article/details/53545693 curl命令可以通过命令行的方式,执行 ...

  10. 【bzoj1452】[JSOI2009]Count 二维树状数组

    题目描述 输入 输出 样例输入 样例输出 1 2 题解 二维树状数组 一开始没看到 1≤c≤100 ,想到了主X树和X块,结果发现c的范围那么小... 二维树状数组水题,和一维的一样,向上修改,向下查 ...