[转]分块

如果行号影响了复制,请点击代码框左上角的按钮。

转自:https://www.cnblogs.com/Sdchr/p/7927411.html

分块
  设阈值 T ,把数据划分为两类,某一类的数据具有某种优势,另外一类的数据又具有另外一种优势,就可以结合利用两种优势,达到更优秀的复杂度。
序列分块
1. 「TH 2517」数颜色
  单点修改,区间不同数个数,强制在线。
2. 「SPOJ UNTITLE1」
  n <= 5e5 ,区间增加等差数列,区间最值。
  区间修改、区间查询是一类经典问题,数据结构的做法通常是划分为若干个子区间,若子区间的信息能够合并,则使用线段树,否则分块。
  对于斜率优化的问题,建了凸壳之后,可以直接三分,不需要二分。
块状链表
1. 「BZOJ 3065」带插入区间第 K 小
  块的大小在 [c, 2c] ,从而保证复杂度。初始化,查找位置(在末尾添加一个字符),插入(分裂),删除(合并)。
值域分块
1. 给定一个长度为 n(1e5) 的序列 a[1], a[2], ..., a[n] .
  m(1e5) 组询问 (l, r, K) , 求区间 [l, r] 去除重复的数之后的第 K 小.
按大小分块
1. 「2013 年国家集训队论文」
  给 n 个字符串 ti ,支持合并,或者查询字符串 s 中出现过多少个字符串 ti 。
2. 「2013 年国家集训队论文」
  给 n 个区间 [li, ri] ,m 组询问 [l, r] ,求与 [l, r] 相交的最长连续子序列的长度。
按质因子大小分块
1. 「AGC 003D」Anticube
  K 补数:定义,求解,平衡规划至 W13
2. 「POI 2010」Divine Divisor
  给 n = a1 * a2 * a3 * ... * am ,m <= 600, ai <= 1e18 。求最大的 K ,存在完全 K 次方因子,并求出此时完全 K 次方因子的个数。
  类似 AGC 003D 的做法。将因子分解完之后,取最大次数即可。设 W = 1e6 ,对 W 以内的进行分解,剩下最多只能再分解两次,有三种可能:p, pq, p^2 ,对 p^2 直接判掉,求两两 gcd 尝试将 pq 进行分解,否则 pq 作为整体考虑,权重为 2 。
3. 「TH 2603」乘积
  选择 K 个不超过 N(500) 的正整数,乘积为无平方因子数,问选择方案数。
图分块
1. 「TH 1021」边学图论边染色
  n 点 m 带权边无向图,点权 0 和 1 ,要么将某个点的颜色改变,要么询问所以 x - y 边的边权和。
  重点擅长枚举点、枚举重点到重点的边,轻点擅长枚举边,边要去重。
莫队算法
1. 带修改莫队
  A={a1,a2,...,an} ,单点修改,询问区间不同数个数。
2. 树上莫队
  入栈出栈序的性质:
  1. 当 x 是 y 的祖先时,Δ[in(x),in(y)]=path(x,y)
  2. 当 x 和 y 没有祖先关系,out(x)<in(y) 时,设 z=LCA(x,y) ,则 Δ[out(x),in(y)]=path(x,y){z}
  莫队维护对称差。
3. 可撤销莫队
  「BZOJ 4358」permu:求区间最长值域连续段。
定期重构
1. 朝鲜树,带插入的 Kd-tree 。


posted @   hehe_54321  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 趁着过年的时候手搓了一个低代码框架
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现
AmazingCounters.com
点击右上角即可分享
微信分享提示