cojs 疯狂的魔法树 疯狂的颜色序列 题解报告

疯狂的魔法树

一个各种操作大杂烩的鬼畜数据结构题目

首先我们注意到树的形态是半随机的

我们可以树分块,对树分成若干个块

对于每个块我们维护一个add标记表示增量

维护一个vis标记表示覆盖量

注意标记的下放和两个标记之间的处理

之后我们对于每个块我们排序,并维护块内的有序化

这样对于每个查询如果涉及到完整的块二分即可

否则暴力查询

这样时间复杂度是O(n*sqrt(n)*log(n))

 

疯狂的颜色序列

很古老的题目,如果去掉强制在线的话我已知的有五种不同的解法

第一种做法是莫队

第二种做法是离线将询问排序之后扫描线+树状数组

第三种做法是计算每个颜色上一次出现的位置,分块块内排序+二分

第四种做法是树套树,跟分块的原理差不多

第五种做法也就是我写的代码,我们计算每个颜色上一次出现的位置pre

那么每次询问等价于询问[L,R]有多少个点的pre值<L

之后就是可持久化线段树的裸题了

posted @ 2016-04-27 20:50  _Vertical  阅读(278)  评论(0编辑  收藏  举报