随笔分类 -  分块

摘要:询问具有可减性,可以差分 $$\begin{aligned} & g(l_1, r_1,x)\times g(l_2,r_2, x) \\=& (g(0,r_1,x) g(0,l_1 1,x)) \times (g(0, r_2, x) g(0, l_2 1, x))\\=& g(r_1,x)\ti 阅读全文
posted @ 2020-02-24 16:15 Mrzdtz220 阅读(88) 评论(0) 推荐(0)
摘要:转化成dfs序上的问题,变成区间加和区间kth 可以用分块+二分,通常复杂度为 $O(m\sqrt{n\log n}\log n)$,这道题里被卡掉了 设块大小为 $B$,每一块内保持有序 修改时整块打上标记,零散块就现在有序表里分裂成两个序列,一个在修改的区间内,一个在修改的区间外,区间内加上值, 阅读全文
posted @ 2020-02-24 10:20 Mrzdtz220 阅读(100) 评论(0) 推荐(0)
摘要:维护一个栈,从任意一个节点开始 dfs,在回溯时加入到栈中。 dfs每一个子树之后,若相对于刚进入该节点时栈的大小,新增加的节点超过 B,就将它们分为一块 这样分完保证不超过 2B,而整个dfs结束之后,若栈中还有节点,就把它们归为最后一块 阅读全文
posted @ 2020-02-22 13:51 Mrzdtz220 阅读(86) 评论(0) 推荐(0)
摘要:分治无法快速维护,考虑分块 $f_{i,j,k}$ 表示第 $i$ 块到第 $j$ 块之间权值为 $1$ 到 $k$ 的答案,$c_{i,j,k}$ 表示第 $i$ 块到第 $j$ 块之间权值为 $k$ 的个数 预处理及回答询问时,新加入一个颜色为 $k$ 的点对答案的贡献为 $2 cnt_k + 阅读全文
posted @ 2020-02-18 13:23 Mrzdtz220 阅读(131) 评论(0) 推荐(0)
摘要:[传送门] 感觉这种信息不符合区间可加性,或者用来区间相加的时间复杂度太高的话就直接分块。res[i][j] 表示第 $i$ 块到第 $j$ 块之间的答案,查询就先查询整块,再对两端暴力。注意不要用memset清空cnt数组,每次使用了再循环一遍撤销操作就行了。 #include <bits/std 阅读全文
posted @ 2019-10-14 21:34 Mrzdtz220 阅读(109) 评论(0) 推荐(0)
摘要:[传送门] 题意就是单点加以及查询下标为等差数列位置上的值之和。刚开始看到这道题。我以为一个数的倍数是log级别的。就直接写了发暴力。就T了。还在想为啥,优化了几发才发现不太对劲。然后才想到是$\dfrac {n}{x}$级别的。不过看到$\dfrac {n}{x}$应该就出来了。当$x \leq 阅读全文
posted @ 2019-10-14 18:57 Mrzdtz220 阅读(170) 评论(0) 推荐(0)
摘要:[传送门] 分块,每一块维护一个单调递增的数组$w$,修改时因为区间加不会影响相邻元素的大小关系,所以在对于一整块的区间加打标记就行了。若不在同一块内就暴力修改每一个数,重新维护一次$w$数组,每次修改最多需要重构两块。查询操作先对每一块的$w$数组二分看存不存在$y$,最优解肯定由第一次出现$y$ 阅读全文
posted @ 2019-10-14 14:23 Mrzdtz220 阅读(170) 评论(0) 推荐(0)