自己yy的一个奇怪东西
Posted p-b-p-b
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己yy的一个奇怪东西相关的知识,希望对你有一定的参考价值。
散步的时候yy区间最值的不同分块做法,发现单点修改\(O(\sqrtn)\)查询\(O(1)\)的做法不是很会?
于是yy了一个奇怪做法,写出来看看。
考虑查询的时候两端的散点可以用前后缀最值查出来,所以只需要考虑中间的块。
中间这些块似乎比较恶心,不知道怎么做。
于是我们把每一个块的最值拎出来作为一个点,再分一次块,就成功地用\(O(1)\)的时间把问题变成了根号级别的子问题。
于是分块套分块套分块套……,似乎很对?
如果左右端点都在同一个块内那么不是很好玩,就对每一个块里面也分块,也是一个根号级别的子问题。
于是查询\(T(n)=T(\sqrtn)+O(1)=O(\log \log n)\)。
那么修改的时候呢?要更新这一个块里面的分块、更新总体的分块、更新前后缀,好像就是\(T(n)=2T(\sqrtn)+\sqrtn\),也就是\(O(\sqrtn)\)的。
复杂度一脸正确?
update:hz大佬优化了一下,发现只需要分两层,在第二层块数是\(O(n^\frac 1 4)\)的,于是可以直接暴力维护任意两个块中间的最值。于是就真的是\(O(\sqrtn)-O(1)\)了。
而且这东西似乎可以维护任意可加且有结合律的信息?
以上是关于自己yy的一个奇怪东西的主要内容,如果未能解决你的问题,请参考以下文章