Ynoi口胡
以洛谷题号表示题目。由于全部只有口胡,基本不会涉及到代码实现、常数之类的细节/kel。
upd:似乎有人误解了博主的强度,这当然不可能全是自己口胡的好吧!
P5612
区间排序,并非一个常见的操作,需要维护连续段均摊。剩下的不难。
动态开店的01Trie/SMT可以缩二度点做到线性空间,但估计用处不大。
P8264
有polylog做法。静态问题,可以在线段树每个节点上 预处理。此处就拿带复制的可持久化平衡树维护经过这段区间后的变换即可。
但根号做法应该更有优势。序列分块,块内如何维护变换?由于值域线性,并查集维护,利用极差均摊+打标记即可。类似第二分块。
P8265
思路是简单的,增删边/换根都只会引起 条边的状态变化。但是具体维护siz没有细想。
P8263
无题解,不保证正确。直接写区间复制的可持久化平衡树?2操作使用二进制建树然后按位打翻转标记。但是我不会正确的带复制可持久化平衡树……
P6781
如果用线段树维护,关键只在于如何pushup。发现分别维护剩余左右括号的信息和后,可以往单侧递归来维护,即 pushup。
带区间平移只需采用树高有保证的平衡树代替线段树。然而只会Treap
P6778
莫队二次离线,转化成“链加链查”,用top-cluster树分块平衡到 。不会top-cluster
P7448
莫队,转化成“新出现了多少个大于 ”的颜色,差分变成“区间内大于 的颜色数”,利用扫描线转化成动态二维数点,可以通过 叉树套树平衡到 ,配合二次离线即可。不会实现这种神秘树套树
P8204
top-cluster树分块后按上端点所在块分批处理即可。
P7125
枚举中心,将以其为中心的区间,根据其对应颜色的出现位置,按半径分成 个段考虑。
一个段内该颜色出现次数相同,众数次数随半径递增,只有二者相等时合法,因此只有至多一个段且可以通过二分找端点(需要快速查区间众数)。
总段数为 。二维平面转化后变成斜线加,矩形查,分类讨论可做单 。
只需快速查区间众数。考虑按颜色出现次数根号分治,大于根号的暴力找,小于根号的采用上述二分方法。此时只需查区间众数出现次数小于根号的区间。
对每个次数,可以双指针预处理固定左端点的最远延伸位置。总复杂度 。
P7124
子树补莫队。链分治后对轻儿子建哈夫曼树来分治,可以单 。
P7712
模拟Tarjan,关键在于找到一个未被访问点和被访问点的low的min。
如果离线处理线段相交,自然是一个扫描线。套Tarjan后需在线处理,所以可持久化SMT。
可持久化后出现无法修改的问题,处理方法是只修改该单点出现的第一个版本,因此此时其他版本的信息可能是错误的。
先暴力dfs找点,找点时顺便pushup最小值,则最小值可以正确维护,最后查最小值时就是对的了。
每个点找一次,时间均摊正确。但由于“未被访问点个数”无法正确维护,可能出现递归进该区间但是没有任何一个点的情况。但每个节点这种情况出现一次后便再不可能出现,亦均摊正确。
P7710
对模数根号分治,大于根号的利用bfs序变成根号次区间加,简单根号平衡。
小于的按模数分类建出根号个重构树,每个点连k级祖先作为父亲。可以发现此时一次修改可以变成重构树上的一个去根子树。
查询时要对每个重构树查一遍贡献,另一个简单根号平衡。
P5610
显然关键只在于如何找到区间内x的倍数位置,剩下的交给暴力均摊。发现可以一开始存下来所有x的倍数位置,如果找到了发现不是,从这个集合删除即可。
可以并查集,但是平衡树遍历区间+删除其中元素也不带 。不知道set实现如何。
P6108
拆方差为平方的期望减期望的平方,分开考虑每个 贡献,发现与其他元素的值无关,只与子序列长度有关。
之后是数学推导。差分递推方法应该是较为简洁的。
P6782
经典容斥,变成度数个子树询问。进行神秘根号分治:对每个点,前根号大的子树暴力查询(此处需简单根号平衡)。其他的子树考虑提取出来离散化做一个小Z的袜子。
发现每个点向上走,如果被祖先提取了,则当前子树大小大于根号,不会被再次提取。因此所有莫队是 的。
P7898
非均摊有深度保证且最好是leafy的平衡树。这里采用了一个特殊的分裂式维护的方法,详见洛谷题解,估计不太用得到。其实是不太理解怎么恰好把儿子也分成两半
粗略来说就类似二进制分组,动态根号分治,根号重构这种。
P7721
矩形颜色数。对x维跑莫队,变成单维(y)带修区间数颜色,用点减边方法,维护同色前驱后继,变成动态二维数点, 叉树套树根号平衡下来。
这道题还是有一定启发性的,对于高维的范围查询问题,可以使用莫队解决其中一些维度,数据结构维护其余维度来做到更优秀的复杂度。当这里使用莫队维护一维,数据结构维护三维时,实际上等价于一个带修改的三维问题,因为一维的莫队就是一个扫描线,也可以看出莫队实际上是一个二维的扫描线。——lxl
P7722
泛化为 三个数组均带修,统计的是 。颜色,因此根号分治,带修但离线,按 根号分治。
小于根号的暴力改影响位置,需要一个简单根号平衡。大于根号的看成动态dp,也需要一个根号平衡。
P7881
时间分块,转化为范围修改查询问题,整块采用分治解决。注意时间分块和根号重构的差异。
P7880
数颜色,考虑一个点何时处在集合中,发现是若干2-side矩形并。于是同颜色的自然也是2-side矩形并。
2-side矩形可用启发式合并处理出。随后是简单二维数点。
P7447
倍增分块(等比数列分块),效果是整块会做整体操作,被暴力操作的数要么跌落,要么不会在同一块内进行太多次。区间限制对每个块开SMT解决。
需要找一个合适的公比。卡空间可以使用 分块。
P8205
不弱于区间逆序对,考虑莫队二次离线上树。先考虑虚树差分(按dfs序排序后相邻取lca),转化成若干条直链数逆序对。
当然可以树分块,但是不如拍成括号序之后做序列莫队二次离线。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】