【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 都是会变的。维护每个

posted @ 2025-12-23 13:17  TallBanana  阅读(1)  评论(0)    收藏  举报