2120: 数颜色 - #include <Seter> - using namespace Orz;

2120: 数颜色

Seter posted @ 2011年11月30日 21:03 in BZOJ with tags Splay SegTree BalancedTree , 2534 阅读

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

RunID User Problem Result Memory Time Language Code Length Submit Time
176421 Seter 2120 Accepted 12076 kb 812 ms C/Edit 2912 B 2011-12-02 12:44:43

10000个数,10000个操作。每次修改一个数/询问一段区间内不同的数有几个。

有点难想……树状数组线段树套平衡树。每个数第一次出现时随便改成一个负数(我改成了这个数的相反数以避免重值),之后改成前一次出现的位置。询问的时候查找一个区间中比左端点小的数有几个(就是没有前继/是区间中第一次出现的数的个数)。

然后这个可以用平衡树维护。由于询问是对于区间的,所以用树状数组线段树套上……

将点i的颜色修改为j的时候要修改i的后继,颜色j对于i的后继和i本身,这里还要用个平衡树维护每个颜色的位置……对于前/后继不存在的情况还要特判……超麻烦……

我的程序又慢又长……不过好歹是第一个树套树的程序……做个纪念!

Update:改成了树状数组……然后Find的时候如果相等就直接返回……瞬间快了……

但是tim大神SegTree+Splay600+MS!!太神了!!不过18K+的代码长度……

至于长度嘛……为什么2K+的代码会被你们写成6K+……

NZM大神说XXXXXXXX必须离线BIT套BIT乱搞……但是我先去试试我的SB方法……

 

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