[转]分块

转自: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

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

随笔 - 17  文章 - 0  评论 - 2

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

随笔 - 17  文章 - 0  评论 - 2

分块

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 阅读(...) 评论(...) 编辑 收藏

刷新评论刷新页面返回顶部

Copyright ©2018 Sdchr

原文地址:https://www.cnblogs.com/hehe54321/p/8877054.html

时间: 2024-10-13 20:22:42

[转]分块的相关文章

CodeChef FNCS (分块+树状数组)

题目:https://www.codechef.com/problems/FNCS 题解: 我们知道要求区间和的时候,我们用前缀和去优化.这里也是一样,我们要求第 l 个函数到第 r 个函数 [l, r] 的函数和,那么我们可以用 sum[r] - sum[l-1] 来求得. 由于这个数据量有点大,所以我们将函数分块. 例如样例: 1 3 有5个函数,那么我们分成3块.{ [1 3] , [2 5] }, { [4 5], [3 5] }, { [1 2] }.每一块对应都有一个sum ,这时如

分块算法及模板

此文为博主原创,转载时请通知博主,并把原文链接放在正文醒目位置. 简要介绍 分块算法就是把一串数据分割成几块数据的算法,其实是对暴力的一种优化. 通常在分块时,每块的大小为√n.但最后一块的大小也可能小于√n,只能用暴力来算. 通过把对单个数据的操作转化为对几个块的数据的操作,能够节省时间,提高运算效率. 分块算法在处理大范围的修改.查询问题时有很大优势. 分块算法代码 1 /*此代码主要模仿了钟皓曦大佬的分块算法*/ 2 #include<iostream> 3 #include<cs

A - 敌兵布阵(分块)

C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:"Tidy,马上汇

gcd的性质+分块 Bzoj 4028

4028: [HEOI2015]公约数数列 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 865  Solved: 311[Submit][Status][Discuss] Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1. MODIFY id x: 将 a_{id} 修改为 x. 2. QUERY x: 求最小的整数 p (0 <= p < n),使

主席树 或者 离散化+分块 BZOJ 4636

4636: 蒟蒻的数列 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 381  Solved: 177[Submit][Status][Discuss] Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知 道N次操作后数列中所有元素的和.他还要玩其他游戏,所以这个问题留给你解决. Input 第一

bzoj2301 [HAOI2011]Problem b【莫比乌斯反演 分块】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 很好的一道题.首先把每个询问转化为4个子询问,最后的结果就是这四个子询问的记过加加减减,类似二维前缀和.那么问题转化为在1 <= x <= lmtx, 1 <= y <= lmty时gcd(x, y) == k的对数,这个问题在转化一下,转化成1 <= x <= lmtx / k,1 <= y <= lmty / k时x与y互质的对数.莫比乌斯反

POJ2104 K-th Number [分块做法]

传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求>=v的有几个 既然一个数v的名次可以求,我们二分这个数就行了啊 然而...... 首先,你二分到的这个数不一定在区间里出现过 比如 1 2 5 8 9 4和5的名次都是3 于是,我修改了某个区间名次的定义: “如果一个数的名次是x,但是区间中没有次数,那么他的名次为x-1” 实现上只需要find里

asp.net core分块上传文件

写完asp.net多文件上传(http://www.cnblogs.com/bestckk/p/5987383.html)后,感觉这种上传还是有很多缺陷,于是...(省略一万字,不废话).这里我没用传统的asp.net,而选择了开源的asp.net core,原因很简单,.net core是.net新的开始,更是.net和.net开发者的未来,希望.net发展越来越好(大家的工资越来越高(●ˇ?ˇ●)). 1.前端的实现: 1).html: 1 <html> 2 <head> 3

CodeForces 455D 分块

题目链接:http://codeforces.com/problemset/problem/455/D 题意:给定一个长度为n的序列a[]. m次操作.共有两种操作 1 l r:将序列的a[l].a[l+1]...a[r]变成a[r].a[l].a[l+1]...a[r-1]:2 l r k:求序列a[l].a[l+1]...a[r]中有多少个值为k. 输入的l,r,k都是加密过的.所以要解密一下.规则为 l=(l+ans-1)%n+1  r=(r+ans-1)%n+1 k=(k+ans-1)%

bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队 分块

1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec  Memory Limit: 64 MB Description 每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q <= 180,000) 个可能的牛的