[BZOJ3065]带插入区间K小值

带插入区间K小值

题解

很明显的块状链表做法。分块万岁

我们先对值域进行分块,只要知道每个块中每个数的出现次数,很容易就可以在O\left(\sqrt{n} \right )的时间内得到第k小。

然后我们需要维护一个序列,进行序列分块。

询问时,我们需求出一段区间内每个数,每个块的出现次数。这可以通过前缀和快速的求出,之前统计下就可以了。对于每个值域块与数字的出现次数。查询时两端暴力处理,中间前缀和直接差分。这样预处理O\left(n\sqrt{n} \right ),查询O\left(\sqrt{n} \right )

修改时也只需要暴力更新块中前缀的信息,O\left(\sqrt{n} \right )就可以解决。

由于有插入信息的存在,需要用块

posted @ 2020-01-27 17:47  StaroForgin  阅读(12)  评论(0)    收藏  举报  来源