Ynoi口胡

以洛谷题号表示题目。由于全部只有口胡,基本不会涉及到代码实现、常数之类的细节/kel。
upd:似乎有人误解了博主的强度,这当然不可能全是自己口胡的好吧!

P5612

区间排序,并非一个常见的操作,需要维护连续段均摊。剩下的不难。
动态开店的01Trie/SMT可以缩二度点做到线性空间,但估计用处不大。

P8264

有polylog做法。静态问题,可以在线段树每个节点上 \(O(len)\) 预处理。此处就拿带复制的可持久化平衡树维护经过这段区间后的变换即可。
但根号做法应该更有优势。序列分块,块内如何维护变换?由于值域线性,并查集维护,利用极差均摊+打标记即可。类似第二分块。

P8265

思路是简单的,增删边/换根都只会引起 \(\log n\) 条边的状态变化。但是具体维护siz没有细想。

P8263

无题解,不保证正确。直接写区间复制的可持久化平衡树?2操作使用二进制建树然后按位打翻转标记。但是我不会正确的带复制可持久化平衡树……

P6781

如果用线段树维护,关键只在于如何pushup。发现分别维护剩余左右括号的信息和后,可以往单侧递归来维护,即 \(O(\log n)\) pushup。
带区间平移只需采用树高有保证的平衡树代替线段树。然而只会Treap

P6778

莫队二次离线,转化成“链加链查”,用top-cluster树分块平衡到 \(O(\sqrt n)-O(1)\)不会top-cluster

P7448

莫队,转化成“新出现了多少个大于 \(a_r\)”的颜色,差分变成“区间内大于 \(a_r\) 的颜色数”,利用扫描线转化成动态二维数点,可以通过 \(n^{0.25}\) 叉树套树平衡到 \(O(\sqrt n)-O(1)\),配合二次离线即可。不会实现这种神秘树套树

P8204

top-cluster树分块后按上端点所在块分批处理即可。

P7125

枚举中心,将以其为中心的区间,根据其对应颜色的出现位置,按半径分成 \(O(\text{出现次数})\) 个段考虑。
一个段内该颜色出现次数相同,众数次数随半径递增,只有二者相等时合法,因此只有至多一个段且可以通过二分找端点(需要快速查区间众数)。
总段数为 \(\sum\text{出现次数}=O(n)\)。二维平面转化后变成斜线加,矩形查,分类讨论可做单 \(\log\)
只需快速查区间众数。考虑按颜色出现次数根号分治,大于根号的暴力找,小于根号的采用上述二分方法。此时只需查区间众数出现次数小于根号的区间。
对每个次数,可以双指针预处理固定左端点的最远延伸位置。总复杂度 \(O(n\sqrt n+m\log m)\)

P7124

子树补莫队。链分治后对轻儿子建哈夫曼树来分治,可以单 \(\log\)

P7712

模拟Tarjan,关键在于找到一个未被访问点和被访问点的low的min。
如果离线处理线段相交,自然是一个扫描线。套Tarjan后需在线处理,所以可持久化SMT。
可持久化后出现无法修改的问题,处理方法是只修改该单点出现的第一个版本,因此此时其他版本的信息可能是错误的。
先暴力dfs找点,找点时顺便pushup最小值,则最小值可以正确维护,最后查最小值时就是对的了。
每个点找一次,时间均摊正确。但由于“未被访问点个数”无法正确维护,可能出现递归进该区间但是没有任何一个点的情况。但每个节点这种情况出现一次后便再不可能出现,亦均摊正确。

P7710

对模数根号分治,大于根号的利用bfs序变成根号次区间加,简单根号平衡。
小于的按模数分类建出根号个重构树,每个点连k级祖先作为父亲。可以发现此时一次修改可以变成重构树上的一个去根子树。
查询时要对每个重构树查一遍贡献,另一个简单根号平衡。

P5610

显然关键只在于如何找到区间内x的倍数位置,剩下的交给暴力均摊。发现可以一开始存下来所有x的倍数位置,如果找到了发现不是,从这个集合删除即可。
可以并查集,但是平衡树遍历区间+删除其中元素也不带 \(\log\)。不知道set实现如何。

P6108

拆方差为平方的期望减期望的平方,分开考虑每个 \(a_i\) 贡献,发现与其他元素的值无关,只与子序列长度有关。
之后是数学推导。差分递推方法应该是较为简洁的。

P6782

经典容斥,变成度数个子树询问。进行神秘根号分治:对每个点,前根号大的子树暴力查询(此处需简单根号平衡)。其他的子树考虑提取出来离散化做一个小Z的袜子。
发现每个点向上走,如果被祖先提取了,则当前子树大小大于根号,不会被再次提取。因此所有莫队是 \(\sum n_i\le n,\sum m_i\le m\) 的。

P7898

非均摊有深度保证且最好是leafy的平衡树。这里采用了一个特殊的分裂式维护的方法,详见洛谷题解,估计不太用得到。其实是不太理解怎么恰好把儿子也分成两半
粗略来说就类似二进制分组,动态根号分治,根号重构这种。

P7721

矩形颜色数。对x维跑莫队,变成单维(y)带修区间数颜色,用点减边方法,维护同色前驱后继,变成动态二维数点,\(n^{0.25}\) 叉树套树根号平衡下来。

这道题还是有一定启发性的,对于高维的范围查询问题,可以使用莫队解决其中一些维度,数据结构维护其余维度来做到更优秀的复杂度。当这里使用莫队维护一维,数据结构维护三维时,实际上等价于一个带修改的三维问题,因为一维的莫队就是一个扫描线,也可以看出莫队实际上是一个二维的扫描线。——lxl

P7722

泛化为 \(a,b,c\) 三个数组均带修,统计的是 \(b_i=a_j=c_k\)。颜色,因此根号分治,带修但离线,按 \(\sqrt{n+q}\) 根号分治。
小于根号的暴力改影响位置,需要一个简单根号平衡。大于根号的看成动态dp,也需要一个根号平衡。

P7881

时间分块,转化为范围修改查询问题,整块采用分治解决。注意时间分块和根号重构的差异。

P7880

数颜色,考虑一个点何时处在集合中,发现是若干2-side矩形并。于是同颜色的自然也是2-side矩形并。
2-side矩形可用启发式合并处理出。随后是简单二维数点。

P7447

倍增分块(等比数列分块),效果是整块会做整体操作,被暴力操作的数要么跌落,要么不会在同一块内进行太多次。区间限制对每个块开SMT解决。
需要找一个合适的公比。卡空间可以使用 \(\log\) 分块。

P8205

不弱于区间逆序对,考虑莫队二次离线上树。先考虑虚树差分(按dfs序排序后相邻取lca),转化成若干条直链数逆序对。
当然可以树分块,但是不如拍成括号序之后做序列莫队二次离线。

posted @ 2022-06-14 23:05  秋叶冬雪  阅读(365)  评论(2编辑  收藏  举报