P3369 记录
niuqichongtian · · 算法·理论
权值线段树
特点
由于权值线段树需要较小值域,我们需要进行离散化。如何离散化呢?这就是权值线段树的要点:离线算法。什么意思?离线算法,就是先把所有操作读入,进行排序,如此一来,最多
就
编码
首先,我们需要两个结构体数组:一个是权值线段树的
历程
- 样例都输出
1 ,呜呜呜 - 经过不懈努力,发现第一个大问题:**初始的
- 第二个大问题:我函数名
ctrl+C ctrl+V过来时忘了改调用的函数名了!卡了我半个多小时 呜呜呜 - 这初始化结构体的玩意不好使啊,大家别用这东西,可能会有
杀身之祸灭族之殃很大风险,我就是想少写几行代码,用了这个东西,结果废了。。。 - 此时提交,得到了
58pts 的(chà)高(píng)分。。。 - 在
粗糙仔细地检查了代码后,我们发现\operatorname{rank}() 函数(对应第三问) 中递归结束,\operatorname{return} 的部分全部返回了1 ,但如果递归到这一层时,它是比\operatorname{max\_value}_i 还大的,辣么返回值不能是1 了,要变成2 。 - 什么分数变成
51pts 了! - 好吧,是我把
\operatorname {size}_u+1 想成2 了!!!改回了58pts - 经过思考发现,如果我们求的是某个在数组外的元素的后继,调用
\operatorname{kth\_element} ( \operatorname{rank} ( x ) ) 是正确的;否则需要调用\operatorname{kth\_element} ( \operatorname{rank} ( x )+1 ) 。改良后得了72pts - 理了个发回来发现忘了把前驱改掉了
呜呜呜 - 诶 前驱怎么改啊 没法改啊 前驱的代码对着呢压
- 然后又去看
tj 了 - 发现人家也是离线算法,不过将所有的查询节点都记录了。并且递归查找或修改时用在所有
1, 2, 3, 5,6 操作中的值的排名去查找。
正解:Treap(Tree+Heap)
暂无内容
小结
暴力出奇迹,打表切实际
一定要 细心细心再细心啊