2333: [SCOI2011]棘手的操作 - #include <Seter> - using namespace Orz;

2333: [SCOI2011]棘手的操作

Seter posted @ 2012年3月08日 12:53 in BZOJ with tags SegTree MergeableHeap SCOI , 3713 阅读

http://www.zybbs.org/JudgeOnline/problem.php?id=2333

RunID User Problem Result Memory Time Language Code_Length Submit_Time
219596 Seter 2333 Accepted 22824 kb 748 ms C/Edit 3032 B 2012-03-07 20:53:06

做了两个多小时,被傻逼错误各种屠,最搞笑的是我没下传标记拍了几组N,M=10000的随机数据都是对的。。。

这题的标准解法是离线算法。。就是先全部U起来,然后处理出DFS序就可以发现每次操作的都是一段区间。。。线段树乱搞就可以了。。好像挺好写的。。。

但是像我这么弱的只能写写在线算法。。其中F3只要全局维护一个堆就行了,A3只要搞个全局变量表示所有数加了多少,那么剩下的东西,由于要合并两堆+取最大值,自然而然想到了可并堆。。。要打标记表示某个点的子树加了多少。。。

可并堆我只会左偏树,但当左链很长的时候好像会囧掉(而且还要支持减小一个数!)。。。于是我选用了随机堆。。。就是合并的时候随机一个儿子合并,这样可以让堆的高度期望在logN级。。那就可以在logN时间内Sink/Swim/将一个点及其祖先们的标记全部下传了。。。

嘛。。。随机的话按照左右左右左右。。。这么随也很快。。。

表示长期不写Splay现在连个rotate操作都写了30+分钟。。。我真是弱暴了。。。

随机数据比Tim快很多。。。看来这个数据还是下了点心思的,说不定就卡掉了左偏树。。。很久以前我写过启发式合并TLE了(不过我不排除我写的程序会死循环的可能)。。。当然如果神犇们要虐配对堆/F-Heap的话说不定也行(二项堆貌似不行)。。。我反正不会。。。

 

By Seter

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee