几乎完全类似于1150的思路,直接参考那个就行了。

  http://www.cnblogs.com/BLADEVIL/p/3527193.html

  1. /**************************************************************
  2. Problem:
  3. User: BLADEVIL
  4. Language: Pascal
  5. Result: Accepted
  6. Time: ms
  7. Memory: kb
  8. ****************************************************************/
  9.  
  10. //By BLADEVIL
  11. type
  12. pointer=^rec;
  13. rec =record
  14. pred, succ :pointer;
  15. num, fuck :longint;
  16. end;
  17. shit =record
  18. shit1, shit2 :longint;
  19. end;
  20.  
  21. var
  22. n, m :longint;
  23. a :array[..] of pointer;
  24. left, right, size :array[..] of longint;
  25. key, adr :array[..] of longint;
  26. t, tot :longint;
  27. ans :longint;
  28.  
  29. procedure left_rotate(var t:longint);
  30. var
  31. k :longint;
  32. begin
  33. k:=right[t];
  34. right[t]:=left[k];
  35. left[k]:=t;
  36. size[k]:=size[t];
  37. size[t]:=size[left[t]]+size[right[t]]+;
  38. t:=k;
  39. end;
  40.  
  41. procedure right_rotate(var t:longint);
  42. var
  43. k :longint;
  44. begin
  45. k:=left[t];
  46. left[t]:=right[k];
  47. right[k]:=t;
  48. size[k]:=size[t];
  49. size[t]:=size[left[t]]+size[right[t]]+;
  50. t:=k;
  51. end;
  52.  
  53. procedure maintain(var t:longint;flag:boolean);
  54. begin
  55. if not flag then
  56. begin
  57. if size[left[left[t]]]>size[right[t]] then
  58. right_rotate(t) else
  59. if size[right[left[t]]]>size[right[t]] then
  60. begin
  61. left_rotate(left[t]);
  62. right_rotate(t);
  63. end else exit;
  64. end else
  65. begin
  66. if size[right[right[t]]]>size[left[t]] then
  67. left_rotate(t) else
  68. if size[left[right[t]]]>size[left[t]] then
  69. begin
  70. right_rotate(right[t]);
  71. left_rotate(t);
  72. end else exit;
  73. end;
  74. maintain(left[t],false);
  75. maintain(right[t],true);
  76. maintain(t,true);
  77. maintain(t,false);
  78. end;
  79.  
  80. procedure insert(var t:longint;v,k:longint);
  81. begin
  82. if t= then
  83. begin
  84. inc(tot);
  85. t:=tot;
  86. left[t]:=;
  87. right[t]:=;
  88. size[t]:=;
  89. key[t]:=v;
  90. adr[t]:=k;
  91. end else
  92. begin
  93. inc(size[t]);
  94. if v<key[t] then insert(left[t],v,k) else
  95. if v>key[t] then insert(right[t],v,k) else
  96. if v=key[t] then
  97. if k>adr[t] then insert(right[t],v,k) else
  98. insert(left[t],v,k);
  99. maintain(t,v>=key[t]);
  100. end;
  101. end;
  102.  
  103. function delete(var t:longint;v,k:longint):shit;
  104. var
  105. damn :shit;
  106. begin
  107. dec(size[t]);
  108. if (v=key[t]) and (k=adr[t]) or (v>key[t]) and (right[t]=) or (v<key[t]) and (left[t]=) then
  109. begin
  110. delete.shit1:=key[t];
  111. delete.shit2:=adr[t];
  112. if (left[t]=) or (right[t]=) then
  113. t:=left[t]+right[t] else
  114. begin
  115. damn:=delete(left[t],v+,k);
  116. key[t]:=damn.shit1;
  117. adr[t]:=damn.shit2;
  118. end;
  119. end else
  120. if v<key[t] then delete:=delete(left[t],v,k) else
  121. if v>key[t] then delete:=delete(right[t],v,k) else
  122. if v=key[t] then
  123. if k>adr[t] then delete:=delete(right[t],v,k) else
  124. if k<adr[t] then delete:=delete(left[t],v,k);
  125. end;
  126.  
  127. function mini(var t:longint):longint;
  128. begin
  129. if right[t]= then exit(adr[t]) else exit(mini(right[t]));
  130. end;
  131.  
  132. procedure init;
  133. var
  134. i :longint;
  135. null :pointer;
  136.  
  137. begin
  138. read(n,m);
  139. if m>n>> then
  140. begin
  141. writeln('Error!');
  142. halt;
  143. end;
  144. for i:= to n do
  145. begin
  146. new(null);
  147. a[i]:=null;
  148. read(a[i]^.num);
  149. end;
  150. for i:= to n do
  151. begin
  152. if i= then a[i]^.pred:=a[n] else a[i]^.pred:=a[i-];
  153. if i=n then a[i]^.succ:=a[] else a[i]^.succ:=a[i+];
  154. end;
  155. for i:= to n do a[i]^.fuck:=i;
  156. end;
  157.  
  158. procedure main;
  159. var
  160. i :longint;
  161. x :longint;
  162. begin
  163. t:=;
  164. for i:= to n do insert(t,a[i]^.num,i);
  165. for i:= to m do
  166. begin
  167. x:=mini(t);
  168. ans:=ans+a[x]^.num;
  169. delete(t,a[x]^.num,a[x]^.fuck);
  170. delete(t,a[x]^.pred^.num,a[x]^.pred^.fuck);
  171. delete(t,a[x]^.succ^.num,a[x]^.succ^.fuck);
  172. a[x]^.num:=a[x]^.pred^.num+a[x]^.succ^.num-a[x]^.num;
  173. insert(t,a[x]^.num,x);
  174. a[x]^.pred^.pred^.succ:=a[x];
  175. a[x]^.pred:=a[x]^.pred^.pred;
  176. a[x]^.succ^.succ^.pred:=a[x];
  177. a[x]^.succ:=a[x]^.succ^.succ;
  178. end;
  179. writeln(ans);
  180. end;
  181.  
  182. begin
  183. init;
  184. main;
  185. end.

bzoj 2151 贪心的更多相关文章

  1. Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化

    https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...

  2. [bzoj 2151]种树(贪心)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 分析:原型是bzoj 1150(CTSC 2007) 首先DP无法下手,想到贪心.想到贪 ...

  3. 【BZOJ 2151】 2151: 种树 (贪心+堆+双向链表)

    2151: 种树 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n.并且每个 ...

  4. bzoj 2151 种树——贪心+后悔

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2151 似乎是半年+前讲过的.(然而看到的时候却不会了) 考虑贪心,限制就是不能选两边的.如果 ...

  5. bzoj 2151: 种树【贪心+堆】

    和数据备份差不多 设二元组(i,a[i]),开一个大根堆把二元组塞进去,以len排序,每次取出一个二元组 因为单纯的贪心是不行的,所以设计一个"反悔"操作. 记录二元组的前驱pr后 ...

  6. bzoj 1193 贪心

    如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...

  7. bzoj 2697 贪心

    就贪心就行了,首先可以看成n个格子,放物品,那么 一个物品假设放3个,放在1,k,n处,那么价值和放在1,n 是一样的,所以一个物品只放两个就行了,价值大的应该尽量放 在两边,那么排序之后模拟就行了 ...

  8. bzoj 3037 贪心

    我们可以贪心的分析,每个点的入度如果是0,那么这个点不可能 被用来更新答案,那么我们每次找入度为0的点,将他去掉,如果他连的 点没有被更新过答案,那么更新答案,去掉该点,环的时候最后处理就行了 /** ...

  9. BZOJ 2151 种树

    贪心+priority_queue. #include<iostream> #include<cstdio> #include<cstring> #include& ...

随机推荐

  1. Qt Qwdget 汽车仪表知识点拆解1 速度表示

    先贴上效果图,注意,没有写逻辑,所以这些都是乱动的 这里线主要说一下中间显示速度的显示制作的方式,在这里,自己专门写了一个数字的仪表 考虑的一般的汽车是没有办法把瞬时速度提升到四位数的,所以我这里就放 ...

  2. deepin linux 安装/启动jeakins报错:处理

    ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin 安装报错: 1.如还未安装java,则安装 ...

  3. Django学习笔记(一):环境安装与简单实例

    Django学习笔记(一):环境安装与简单实例 通过本文章实现: Django在Windows中的环境安装 Django项目的建立并编写简单的网页,显示欢迎语与当前时间 一.环境安装 结合版本兼容性等 ...

  4. tensorflow nmt基本配置(tf-1.4)

    随着tensorflow的不断更新,直接按照nmt的教程搭建nmt环境会报错的...因此,需要一些不太好的办法来避免更多的问题出现.tensorflow看来在ubuntu和debian中运行是没有问题 ...

  5. Django 运行Admin 页面时出现 UnicodeDecodeError: 'gbk' codec can't decode byte XXXX解决方法

    具体报错信息 Traceback (most recent call last): File "D:\Anaconda3\lib\site-packages\django\core\hand ...

  6. 深度学习-CNN tensorflow 可视化

    tf.summary模块的简介 在TensorFlow中,最常用的可视化方法有三种途径,分别为TensorFlow与OpenCv的混合编程.利用Matpltlib进行可视化.利用TensorFlow自 ...

  7. python第三天(dictionary应用)转

    1.题目: python实现英文文章中出现单词频率的统计   前言: 这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就利用他的编程技能出版过一本背单词的畅销书 ...

  8. [译]如何去除Git的unstaged的文件提示“old mode 100755 new mode 100644”?

    原文来源:https://stackoverflow.com/questions/1257592/how-do-i-remove-files-saying-old-mode-100755-new-mo ...

  9. android桌面悬浮窗仿QQ手机管家加速效果

    主要还是用到了WindowManager对桌面悬浮进行管理. 需要一个火箭的悬浮窗 一个发射台悬浮窗  ,判断火箭是否放到了发射台,如果放上了,则使用AsyTask 慢慢将火箭的图片往上移.结束后., ...

  10. springMVC js等文件找不到解决方法

    <mvc:resources mapping="/javascript/**" location="/static_resources/javascript/&qu ...