[转]分块

转自: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 补数:定义,求解,平衡规划至 $W ^ {\frac{1}{3}}$ 。
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 = \left\{ a_1, a_2, ..., a_n \right\}$ ,单点修改,询问区间不同数个数。
2. 树上莫队
  入栈出栈序的性质:
  1. 当 x 是 y 的祖先时,$\Delta [in(x), in(y)] = path(x, y)$
  2. 当 x 和 y 没有祖先关系,$out(x) < in(y)$ 时,设 $z = LCA(x, y)$ ,则 $\Delta [out(x), in(y)] = path(x, y) \cup \left\{ z \right\}$
  莫队维护对称差。
3. 可撤销莫队
  「BZOJ 4358」permu:求区间最长值域连续段。
定期重构
1. 朝鲜树,带插入的 Kd-tree 。


Sdchr

天上下,我独尊,观自在,守本心。

分块

1. 「TH 2517」数颜色

  单点修改,区间不同数个数,强制在线。

2. 「SPOJ UNTITLE1」

  n <= 5e5 ,区间增加等差数列,区间最值。

  区间修改、区间查询是一类经典问题,数据结构的做法通常是划分为若干个子区间,若子区间的信息能够合并,则使用线段树,否则三分,不需要二分。

块状链表

1. 「BZOJ 3065」带插入区间第 K 小

  块的分块

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 补数:定义,求解,平衡规划至 $W ^ {\frac{1}{3}}$ 。

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 = \left\{ a_1, a_2, ..., a_n \right\}$ ,单点修改,询问区间不同数个数。

2. 树上莫队

  入栈出栈序的性质:

  1. 当 x 是 y 的祖先时,$\Delta [in(x), in(y)] = path(x, y)$

  2. 当 x 和 y 没有祖先关系,$out(x) < in(y)$ 时,设 $z = LCA(x, y)$ ,则 $\Delta [out(x), in(y)] = path(x, y) \cup \left\{ z \right\}$

  莫队维护对称差。

3. 可撤销莫队

  「BZOJ 4358」permu:求区间最长值域连续段。

定期重构

1. 朝鲜树,带插入的 Kd-tree 。

 
posted @ 2017-11-30 10:05 Sdchr 阅读(...) 评论(...) 编辑 收藏
posted @ 2018-04-18 19:21  hehe_54321  阅读(138)  评论(0编辑  收藏  举报
AmazingCounters.com