【A】数据结构 2
https://vjudge.net/contest/776672
P9809 [SHOI2006] 作业 Homework
根号分治。
- \(y\le \sqrt V\):每次插入暴力更新这部分的答案。
- \(y>\sqrt V\):变成 \(V/y\) 次查询后继。值域分块,需要支持 \(O(1)\) 查询。
CF1822G2 Magic Triples (Hard Version)
可以对于中间项 \(a_j\) 枚举 \(b\)。\(b=1\) 单独计算。
因为 \(b\le \sqrt V\),我们考虑如何分解因数?
- \(a_j\le B\):暴力分解,复杂度 \(O(\sqrt B)\)。
- \(a_j>B\):显然有用的 \(b\) 不超过 \(V/B\),\(O(V/B)\) 分解。
平衡得到 \(B=V^{\frac{2}{3}}\),复杂度 \(O(nV^{\frac{1}{3}})\)。
P5071 [Ynoi Easy Round 2015] 此时此刻的光辉
- \(p> V^{1/3}\):莫队处理,每个数只有至多 2 个这样的质因数。
- \(p<V^{1/3}\):个数不多,可以处理前缀和。
未公开题目
给出一棵点有颜色的树,多次询问,每次给出颜色集合,问只保留这个颜色集合内的颜色的点后,\(u\) 所在连通块的大小。
\(n,q\le 2\times 10^5,c\le 15\)。
关于连通块的这类题目,我们的做法是:点分治,若重心和 \(u\) 是连通的,那么我们就在这个重心统计答案。否则可以递归子树。
那么对于这题,点分治到重心 \(t\),求出每个点 \(u\) 到 \(t\) 的颜色集合。高维前缀和处理,这部分复杂度 \(O(2^{c}\times c)\)。
每次都跑这个东西,很不优。考虑平衡复杂度。
设阈值 \(B\),当节点数 \(\ge B\) 的时候跑上面那个。否则我们跑暴力查询。
复杂度分析是 \(O(qB+\frac{n}{B}\times 2^{c}c)\)。平衡得到 \(B=\sqrt{2^cc}\)
P5607 [Ynoi2013] 无力回天 NOI2017
把并变成求交。
- brute I:bitset 做。
- brute II:维护 \(ans_{x_1,x_2}\),设元素 \(i\) 最终被 \(s_i\) 个集合包含,更新复杂度为 \(\sum \binom{s_i}{2}\)。
那么若 \(s_i\le S\) 做第一个暴力,否则做第二个。复杂度平衡为 \(O(m\sqrt {\frac{m}{w}})\)。空间可能有点问题。
P5386 [Cnoi2019] 数字游戏
莫队维护值域,将数标记为 0/1。
需要维护区间连通块 \(\mathsf{siz}^2\)。
回滚莫队维护只把 0 变成 1 的操作。
考虑序列分块,维护极长的 1 的连续段,将贡献放在连通块左端点,使用分块做区间询问。然后修复左/右端点的贡献即可。可能需要分块维护 0 的前驱和后继。
牛客题
给出 \(a_{1\sim n}\),多次询问 \([l,r],k\),问区间出现次数 \(\ge k\) 的数有多少种。
考虑分块,类似莫队,从整块开始,拓展散块。
对于整块我们存出现次数为下标的桶,自然根号。然后再维护一下每个数在区间内出现了多少次就好了。
时空 \(O(n\sqrt n)\)。
P11706 「KTSC 2020 R1」穿越
dp,更新是:\([l,r]\) 加上 \(B\),然后全局对 \(\min+A\) 取 min。
考虑 A、B 都是会变的。考虑 \(dp_{i,j}\) 他可能是形如 \(\min uA+vB\)。
有些 \((u,v)\) 的二元组他是不优秀的,可以排除。具体地,我们建立 \((u,v)\) 的这个坐标系,那么我们只关心下凸壳上的点。
考虑线段树维护 \(dp_i\),每个节点维护凸壳 min,标记也是一个凸壳和一个向上平移 tag。+A 就是往右平移,+B 就是往上平移。复杂度是 \(O(点数\times n\log n+q\log n)\),查询就是拿个斜率在凸壳上二分。
那点数是个什么东西?考虑限制了 \(u,v\le n\),那么凸壳大小最大是 \(O(n^{\frac{2}{3}})\)。
P7881 [Ynoi2006] rmpq
考虑询问分块,前面的块怎么预处理?分治,可以做到 \(2B^2\)。
整体复杂度 \(O(\frac{n}{B}\times 2B^2+nB+\frac{n^2}{B})\),平衡就是 \(B=\sqrt n\)。
- 等价类分治。
qoj1851 Directed Acyclic Graph
询问分块,每 \(w\) 个询问拉出来跑一次,得到每个点被哪些操作覆盖了。然后我们询问就可以很容易地求出答案了。然后修改一下点权就好了。
- 规约性:如果 problem A 能做 problem B,那么 A 就是比 B 强。
那么这个题就是可以做 DAG 可达性,所以至少要 \(O(n^2/w)\)。
CF1476G Minimum Difference
拍个待修改莫队,查询根号复杂度就好了。\(O(n^{5/3})\)
浙公网安备 33010602011771号