题意:见题面

思路:因为每个时刻要么全是人要么全是宠物,所以可以一棵splay解决

维护单点插入,单点删除,求前驱,求后继即可

  1. var t:array[..,..]of longint;
  2. num,fa:array[..]of longint;
  3. n,cnt,t1,t2,i,root,p,x,y:longint;
  4. ans:int64;
  5.  
  6. procedure rotate(x:longint;var k:longint);
  7. var y,z,l,r:longint;
  8. begin
  9. y:=fa[x]; z:=fa[y];
  10. if t[y,]=x then l:=
  11. else l:=;
  12. r:=-l;
  13. if y=k then k:=x
  14. else
  15. if t[z,]=y then t[z,]:=x
  16. else t[z,]:=x;
  17. fa[x]:=z; fa[y]:=x; fa[t[x,r]]:=y;
  18. t[y,l]:=t[x,r]; t[x,r]:=y;
  19. end;
  20.  
  21. procedure splay(x:longint;var k:longint);
  22. var y,z:longint;
  23. begin
  24. while x<>k do
  25. begin
  26. y:=fa[x]; z:=fa[y];
  27. if y<>k then
  28. begin
  29. if (t[y,]=x)xor(t[z,]=y) then rotate(x,k)
  30. else rotate(y,k);
  31. end;
  32. rotate(x,k);
  33. end;
  34. end;
  35.  
  36. procedure ins(var k:longint;x,last:longint);
  37. begin
  38. if k= then
  39. begin
  40. inc(cnt);
  41. k:=cnt; num[k]:=x;
  42. fa[k]:=last; splay(k,root);
  43. exit;
  44. end;
  45. if x<num[k] then ins(t[k,],x,k)
  46. else ins(t[k,],x,k);
  47. end;
  48.  
  49. procedure del(x:longint);
  50. var k:longint;
  51. begin
  52. splay(x,root);
  53. if t[x,]*t[x,]= then root:=t[x,]+t[x,]
  54. else
  55. begin
  56. k:=t[x,];
  57. while t[k,]> do k:=t[k,];
  58. t[k,]:=t[x,]; fa[t[x,]]:=k;
  59. root:=t[x,];
  60. end;
  61. fa[root]:=;
  62. end;
  63.  
  64. procedure pred(k,x:longint);
  65. begin
  66. if k= then exit;
  67. if num[k]<=x then
  68. begin
  69. t1:=k; pred(t[k,],x);
  70. end
  71. else pred(t[k,],x);
  72. end;
  73.  
  74. procedure succ(k,x:longint);
  75. begin
  76. if k= then exit;
  77. if num[k]>=x then
  78. begin
  79. t2:=k; succ(t[k,],x);
  80. end
  81. else succ(t[k,],x);
  82. end;
  83.  
  84. begin
  85. assign(input,'bzoj1208.in'); reset(input);
  86. assign(output,'bzoj1208.out'); rewrite(output);
  87. readln(n);
  88. for i:= to n do
  89. begin
  90. readln(x,y);
  91. if root= then begin p:=x; ins(root,y,); end
  92. else if p=x then ins(root,y,)
  93. else
  94. begin
  95. t1:=-; t2:=-;
  96. pred(root,y); succ(root,y);
  97. if t1=- then
  98. begin
  99. ans:=ans+num[t2]-y; ans:=ans mod ; del(t2);
  100. end
  101. else if t2=- then
  102. begin
  103. ans:=ans+y-num[t1]; ans:=ans mod ; del(t1);
  104. end
  105. else
  106. if y-num[t1]>num[t2]-y then
  107. begin
  108. ans:=ans+num[t2]-y; ans:=ans mod ; del(t2);
  109. end
  110. else
  111. begin
  112. ans:=ans+y-num[t1]; ans:=ans mod ; del(t1);
  113. end;
  114. end;
  115. end;
  116. writeln(ans);
  117. close(input);
  118. close(output);
  119. end.

【BZOJ1208】宠物收养所(splay)的更多相关文章

  1. 【BZOJ1208】[HNOI2004]宠物收养所 Splay

    还是模板题,两颗splay,找点删即可. #include <iostream> #include <cstdio> #include <cstdlib> #def ...

  2. 【BZOJ-1208】宠物收养所 Splay

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

  3. [bzoj1208][HNOI2004]宠物收养所——splay

    题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...

  4. [BZOJ1208]宠物收养所(Splay)

    Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...

  5. BZOJ1208 宠物收养所

    Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...

  6. HNOI2004宠物收养所(splay维护二叉搜索树模板题)

    描述 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

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

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

  8. BZOJ1208 [HNOI2004]宠物收养所 splay

    原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html 题目传送门 - BZOJ1208 题意概括 有两种数,依次加入. 规则为下: 如果当前剩余 ...

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

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

  10. bzoj 1208 宠物收养所--splay

    这个题也是单点维护,不管来的是人还是狗,只要num=0就插入,否则就删除. // File Name: ACM/bzoj/1208.cpp // Author: Zlbing // Created T ...

随机推荐

  1. python 基础网络编程1

    python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...

  2. 在hibernate框架中配置显示sql语句

    使用Hibernate的框架开发时,可在Hibernate.cfg.xml中加上 <property name="hibernate.show_sql">true< ...

  3. win10 多桌面 win+tab | ctrl+win+左右箭头

    win10 多桌面 win+tab | ctrl+win+左右箭头

  4. 利用python进行数据分析2_数据采集与操作

    txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...

  5. Python字符编码补充

    字符编码: Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的. 这次是要彻底解决Python字符编码的问题!!! 1 字符编码的发展过程: 1 .AS ...

  6. JAVA中IP和整数相互转化(含有掩码的计算)

    import java.net.InetAddress;/** * 用于IP和整数之间的相互转换 * @author Andy.Wang * */public class IPv4Util {    ...

  7. Bootstrap历练实例:表单控件状态(焦点)

    输入框焦点 当输入框 input 接收到 :focus 时,输入框的轮廓会被移除,同时应用 box-shadow. <!DOCTYPE html><html><head& ...

  8. ios之UIToolBar

    toolbar除了可以和navigationController一起用之外,也可以独立用到view里.工具栏UIToolbar – 一般显示在底部,用于提供一组选项,让用户执行一些功能,而并非用于在完 ...

  9. Pycharm快捷键及Python常用转义符

    不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...

  10. tkinter学习-文本框

    阅读目录 Entry 输入框 Text 文本框 Entry: 说明:输入控件,用于显示简单的文本内容 属性:在输入框中用代码添加和删除内容,同样也是用insert()和delete()方法 from ...