分块思想

分块思想是对原数据适当的划分,并且在划分后的每一个块上预处理部分信息,从而优化算法。
大体思路就是:

  • 对于给出的序列按照固定的块长 ( 一 般 为 n ) (一般为\sqrt n) (一般为n ​)进行分块,预处理出每个块中询问的信息
  • 在询问时,答案可以分为三部分:中间完整的块,左端点所在不完整的块,右端点所在不完整的块。对于第一种,通过上一步预处理的信息直接获得答案。对于第二种和第三种,暴力遍历一遍区间求得答案。
  • 假设块长为 n \sqrt n n ​,那么询问时,第一种的时间复杂度为 O ( 1 ) O(1) O(1)或 O ( n ) O(\sqrt n) O(n ​),后两种的时间复杂度为 O ( n ) O(\sqrt n) O(n ​)。整体时间复杂度为 O ( n n ) O(n\sqrt n) O(nn ​)
    很经典的数列分块入门题

值域分块思想

  • 当序列的数都 < = 1 e 5 <=1e5 <=1e5时一般都可以用值域分块
  • 用来统计区间里有多少个数的值在固定区间 [ v a l l , v a l r ] [vall,valr] [vall,valr]里
  • 一般和莫队结合使用

题目解析

luoguP4867 Gty的二逼妹子序列

点击跳转

  • 对于区间问题不难想到离线算法的莫队,但是莫队没有办法维护权值的范围,考虑再套一种数据结构。
  • 由于 1 < = a i < = n 1<=a_i<=n 1<=ai​<=n并且没有修改操作,进行值域分块,注意一些计算贡献的小细节,时间复杂度 O ( n n ) O(n\sqrt n) O(nn ​)

luoguP4396 [AHOI2013]作业

点击跳转

  • 跟上题一样,再多开一个数组维护数的个数就好了

LOJ6285.数列分块入门 9

点击跳转

  • 一个很经典的题,求众数离线可以莫队,在线可以分块;
  • 按照一般的思路去想,分块后的答案来源
  • 左端点 q l ql ql所在块的众数,右端点 q r qr qr所在块的众数, b e l o n g [ q l ] + 1 belong[ql]+1 belong[ql]+1到 b e l o n g [ q r ] − 1 belong[qr]−1 belong[qr]−1的块的众数
  • 对于每一种可能,我们都统计出现的次数,最后更新答案就好;
  • 可以用一个 v e c t o r vector vector存储每个数出现的下标,计算每个数在某个区间的出现次数就可以二分找。
  • 由于 a i a_i ai​的范围过大,需要离散化。要注意离散化后统计答案的过程,有一些细节;
  • 那么前两种可能性我们都可以直接枚举每个数出现的次数,第三种呢,枚举显然不现实;
  • 预处理出 d p [ i ] [ j ] dp[i][j] dp[i][j]表示第 i i i块到第 j j j块的众数,时间复杂度 O ( n n ) O(n\sqrt n) O(nn ​)

牛客 仓鼠与珂朵莉

点击跳转

  • 跟上题区别不大,多乘一个价值就好了
  • 注意强制在线 l , r l,r l,r的处理

CF455D Serega and Fun

点击跳转

  • 考虑操作 1 1 1对操作 2 2 2的影响,分块后每次移动的时候,只有首项跟尾项元素会对答案产生影响。对每个块多加个deque维护一下。
  • 由于 1 < = a i < = n 1<=a_i<=n 1<=ai​<=n,对每个数都记录一下出现的次数,还要维护 c [ i ] [ j ] c[i][j] c[i][j]表示第 i i i块里 j j j出现的次数;
  • 更新的时候,注意处理整块与非整块的关系

牛客 小 Q 与彼岸花

O ( n 2 ) O(n^2) O(n2)题解
O ( n n ) O(n\sqrt n) O(nn ​)题解

  • 对于最大异或值一般的解法都是放到 01 01 01字典树上去跑,这题也不例外。但是对于 m m m个询问来说,每次都对于 [ l , r ] [l,r] [l,r]重新建立字典树显然时间和空间都不允许,所以这时候就可以用可持久化字典树来查询 [ l , r ] [l,r] [l,r]的字典树啦
  • 这样的话时间也还不是很够,考虑再怎么进行优化。可以进行分块操作,因为整块区间的值都是固定的,设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示第 i i i块到第 j j j块之间的任取两个数的最大异或值,这个显然可以预处理出来。借鉴分块求区间众数的预处理思想,时间复杂度为 O ( n n l o g n ) O(n\sqrt n log n) O(nn ​logn)
  • 对于查询,考虑答案的构成:中间整块的最大异或值,左端点所在非完整块的最大异或值,右端点所在非完整块的最大异或值;第一种就是预处理的 d p dp dp数组的值,后两种可以枚举每一个数,贪心的在 [ l , r ] [l,r] [l,r]的字典树上查找最大异或值,时间复杂度为 O ( 2 n l o g n ) O(2\sqrt n logn) O(2n ​logn)
    强化版

一些有用的链接

Codeforces 455D 学长题解
仓鼠与珂朵莉 学长题解
分块入门 渊佬题解
分块入门 涛巨题解

待补的题

~

【知识总结】分块和值域分块相关推荐

  1. 莫队 ---- 值域分块处理优化字典树上的查询 杭电多校2021第二场1004 i love counting

    题目链接 题目大意: 就是给你nnn个数,mmm次询问 每次询问给你l,r,a,bl,r,a,bl,r,a,b问你在[l,r][l,r][l,r]区间里面有多少种种种数c(XOR)a≤bc(XOR)a ...

  2. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)

    题目链接:点击查看 题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy ...

  3. HDU - 6959 zoto 莫队 + 值域分块

    传送门 文章目录 题意: 思路: 题意: 给你nnn个数,每个数有个值,有mmm次询问,每次给定l,r,y1,y2l,r,y1,y2l,r,y1,y2代表查询[l,r][l,r][l,r]区间内在[y ...

  4. 20200903 专题:值域分块

    总览: 做了一道毒瘤题 带插区间k小 并且树套树常数过大,过不去 (毒瘤出题人毒瘤卡常) 于是就学习了新科技:值域分块 实质是分块套分块,先给序列分块,再在每个块中给值域分块 (分块用链表实现好方便 ...

  5. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

  6. matlab矩阵分块与把分块矩阵还原

    A=rand(256,64); %将A分块 B=mat2cell(A,ones(256/16,1)*16,ones(64/16,1)*16); %ones(a,b)为创建a行b列的值为1的矩阵 %B{ ...

  7. 【数论】整除分块(数论分块)

    目录 引入 找规律 分块数量(时间复杂度分析) 分块边界 模板 例题 1.约束研究 2.约数和 3.余数求和 4.Fear Factoring 5.Floor and Mod 引入 整除分块是数论问题 ...

  8. 「分块」数列分块入门1 – 9 by hzwer 解题记录

    出处 学习蓝书的时候感觉书上关于分块的题目太少了.而且都是难度较大的一些分块题目,想巩固一下分块方面的知识,就找到了hzwer大佬的分块入门知识介绍.用这篇博客记录一下. 从树状数组到线段树再到分块. ...

  9. matlab legend 分块,matlab legend 分块!

    matlab legend 分块! (2013-03-26 18:07:38) %% %压差 clc;clear all;figure(55);set (gcf,'Position',[116 123 ...

最新文章

  1. Datawhale第四期组队学习团队成员
  2. 微信开源「派大星」:4000元游戏电脑能带动7亿参数GPT!
  3. HTML控制文本框只能输入数字和小数点,并且只能保留小数点后两位 金额转换,阿拉伯数字的金额转换成 面试题
  4. 初识FPGA(一)(初步介绍FPGA)
  5. PHP之MVC项目实战(二)
  6. 【java基础】——java枚举类型基本介绍
  7. 苹果网页归档转html,常用JS转换HTML转义符
  8. Silverlight实用窍门系列:28.Silverlight制作随机分布雷达扫描点,模拟雷达扫描图之被扫描设备【附带源码实例】...
  9. PHP判断远程url是否有效的几种方法
  10. vue移动端pdf在线预览,并实现手势缩放、移动
  11. Hyper-V新建Windows7虚拟机
  12. 社区发现算法中模块化度量值Q(Modularity)的计算
  13. 程序员创业必读的几本书
  14. burp如何设置微信小程序代理
  15. 核燃料干式储存容器市场现状及未来发展趋势
  16. 2022年数维杯国际赛C题翻译
  17. python爬虫登录微博_【新手学Python爬虫】微博网页PC端抓包分析和模拟登录
  18. 高数笔记(一):函数与极限,无穷大与无穷小
  19. 说说自己喜欢的漫画吧
  20. Xh_CMS渗透测试文档

热门文章

  1. Dpark的安装测试
  2. 关于QT4的一些学习杂记
  3. 【高效办公】Everything高效应用案例——软件基本信息篇
  4. 时间序列预测-深度学习方法
  5. css内边距属性、外边距属性
  6. 基于树莓派和OpenCV的人脸识别
  7. SSM多表联查,原来如此方便,快捷!!!
  8. android button的美化
  9. FastUnit超简单摘抄
  10. python读取grib格式数据