Sqrt Note

Ntokisq 的 [DS] sqrt technology 题单的学习笔记。

a 转化成 b 下标,变为求区间最长连续上升子序列。

直接 dp O(qn),回滚莫队 O(nq)

强制在线,考虑分块。整块之间答案预处理。散块对整块,对块 j 预处理出 [sj,i][i,tj] 的答案,散块每个扫一遍。散块对散块,先算左右散块各自的,再算左散块对右散块的。利用右散块每个数的答案贡献到初始值的位置,扫左散块同时更新。

B=n,时间 O(nn+qn),空间 O(nn)

这个是大众题目,预处理出整块间的答案。把同一个值的所有下标塞进一个 vector,暴力扫左右散块,若 vectorposi±ans 的下标存在就使 ansans+1

时间 O(nn+qn),空间 O(n)

考虑分块。先想查询。

对于块的内部,每个块预处理 disi,j,k,表示第 i 个块内,jk 的最短距离,要将 j,k 在块内离散化。对于块到块,维护第 i 个块值 j 最早出现位置和最晚出现位置 Li,j,Ri,j,贪心算下答案。

整块修改。若当前块没出现 x,直接跳过。若当前块没出现 y,直接将 x 对应的离散值传给 y。若当前 x,y 均出现,暴力更新关于 x,y 所有信息。每次这样修改都会使块内的颜色少一,最多修改 O(n) 次,复杂度没问题。

时间 O(nn+qn),空间 O(nn)

启发式合并解决合并操作。复杂度瓶颈在于找邻居,根号分治即可。siz 小于 B 暴力扫自己的相邻点,大于 B 暴力维护每种颜色的邻居。

应该是时间 O(nlogn+qn),空间 O(nn)

先序列分块。查询利用值域分块。修改就块内离散化,整块部分类似天降之物。要是 x,y 都存在就暴力修改,每次减少一个颜色,总颜色是 O(q+n) 的,摊下来没错。

时间 O((n+q)(n+w)),空间 O(nn+nw)

序列分块,整块对整块可以预处理相邻块的贡献然后做二维前缀和,这部分可以归并。整块内部答案直接 O(BlogB) 预处理,散块内部可以维护 pre,suf 表示向前向后的答案,散块对整块可以处理值域前缀和,也可以维护 Fi,j 1j 与块 i 之间的逆序对数。散块到散块就归并一下,提前预处理每个块排序后的数组。

同一个块内就容斥一下就好。

时间 O(nn+qn),空间 O(nn)

posted @   Terac  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示