【A】数据结构 2
P9809 [SHOI2006] 作业 Homework
根号分治。
- \(y\le \sqrt V\):每次插入暴力更新这部分的答案。
- \(y>\sqrt V\):变成 \(V/y\) 次查询后继。值域分块,需要支持 \(O(1)\) 查询。
也可以用 set 做,复杂度加一个 \(O(\sqrt \log )\)。
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\)。
关于连通块的这类题目,我们的做法是:点分治,若重心是满足条件的,那么我们就在这个重心统计答案。否则可以递归子树。
那么对于这题,点分治到重心 \(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\)。
考虑序列分块,\(\color{Red}\mathtt ?\)
牛客题
给出 \(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 都是会变的。维护每个
浙公网安备 33010602011771号