首页 > 其他分享 >分块

分块

时间:2023-02-09 16:34:18浏览次数:44  
标签:log 分块 值域 复杂度 num 序列

(强制在线)单点修,区间第 \(k\) 小

  • 首先有一个简单的序列分块+值域二分做法:

    • 序列分块,对每个块建值域树状数组。

    • 修改时暴力修改,\(O(\log)\)。

    • 询问时将两侧散块合并建一个虚块,然后在值域上二分,在每块内查询,\(O(B\log+num\log^2)\)。

    • 显然这是可平衡的,令 \(B=num\log\),解得 \(B=\sqrt{n\log}\),\(num=\frac{\sqrt{n}}{\sqrt{log}}\),代入得复杂度为 \(O((n\log)^\frac{3}{2})\),但意义不大。

    • 考虑优化。使用多树二分,可以去一只 \(\log\),也使得复杂度自平衡,时间复杂度为 \(O(n\sqrt{n}\log)\)。

  • 如果修改的值不强制在线,有一个美妙的序列分块套值域分块做法:

    • 序列分块。然后值域分块,开桶(开不下就开哈希表)\(t_{i,j}\) 表示前 \(i\) 个序列块中有多少个 \(j\),并维护 \(s_{i,j}\) 表示前 \(i\) 个序列块中,第 \(j\) 个值域块中有多少个数。

    • 修改时暴力修改。暴力枚举后方序列块的 \(s,t\),复杂度为 \(O(num)\)。

    • 询问时,将两侧散块合并建一个虚块,将中间的整块也合并进去,我们只关心这个虚块中第 \(j\) 个值域块有多少个数,所以可以利用 \(s\) 的差分性快速处理整块。然后从小到大暴力枚举答案在哪个值域块内,直到找到为止。接下来在这个值域块内暴力枚举答案即可。\(O(B_s+num_r+B_r)\),\(s\) 指 sequence 序列,\(r\) 指 range 值域。因此需要修改的值可以离线,否则表现还不如上面那个。显然其复杂度已经平衡了。

区间修,区间查 \(>k\) 的个数

  • 本题有一个可以交的改版 UOJ #435。

  • 序列分块,发挥懒标记作用。

    • 修改时,对散块暴力修改之后维护一个有序副本,\(O(B\log)\);对整块直接打 tag,\(O(num)\)。

    • 询问时,对散块暴力枚举,\(O(B)\);在整块上二分,注意这里 \(k\) 要减去对应的 tag(原本是 \(>k\),现在是 \(>k-tag\)),\(O(num\log)\)。

    • 故总复杂度为 \(O(n\sqrt{n}\log)\),其已经平衡。

    • 如果值域较小,譬如修改为 \(\pm 1\),则可以将二分改成值域分块。具体地,维护 \(s_{i,j}\) 表示第 \(i\) 个块中前 \(j\) 个值域块有多少个数和 \(t_{i,j}\) 表示前 \(i\) 个块中恰为 \(j\) 的有多少个数,...好像不行啊。tag 不统一。单点修大概就可以。但是 这篇博客 说可以,我不会啊...如果有人看到而且会的话,求教。

标签:log,分块,值域,复杂度,num,序列
From: https://www.cnblogs.com/weixin2024/p/17105764.html

相关文章

  • 大文件分块上传实现
    原理说明对于大文件上传这个问题,作为一个有追求的程序员一定会有所思考,解决这个问题无非就是将文件变小,也就是通过对文件压缩或者对大文件分块后再上传。下面我们就来看看......
  • 【MMAsia 2021】基于分块的点云几何压缩自编码器
    Patch-BasedDeepAutoencoderforPointCloudGeometryCompressionhttps://arxiv.org/abs/2110.09109这篇论文使用深度自编码器,提出了一种基于分块(patch)的有损点云几......
  • 【YBT2023寒假Day4 C】樱桃莓莓(交互)(四毛子分块)(线段树)
    樱桃莓莓题目链接:YBT2023寒假Day4C题目大意有一个黑盒操作满足交换律和结合律,有n个数,q次询问,每次选m个下标,你要计算所有不包含那m个下标的数进行黑盒操作之后的......
  • 简单分块与莫队
    1-分块1.1-定义分块是将要维护的信息分成若干块,而后通过维护整块的信息或者是块间的信息来优化算法。1.2-序列分块在序列上以线段树来类比,线段树是将序列每次对......
  • 【YBT2023寒假Day2 B】树上距离(分块)(LCA)(DP)
    树上距离题目链接:YBT2023寒假Day2B题目大意一棵树,边有边权,每次给出l,r,x,求x号点走到编号在l~r之间最近的点的距离。思路这题还有其它方法,比如线段树分治+线段树......
  • 分块学习笔记
    分块优雅的暴力。分块的思想是通过划分和预处理来达到时间复杂度的平衡。分块后任取一区间,中间会包含整块和零散块。一般对零散块暴力处理,整块通过预处理的信息计算。......
  • 分块与线段树
    分块和线段树的区别在于,分块算法可以维护一些线段树维护不了的东西,例如单调队列等,线段树能维护的东西必须能够进行信息合并,而分块则不需要。那么什么时候需要线段......
  • Codeforces Round #846 (Div. 2) E. Josuke and Complete Graph(数论分块)
    题意:给定一个区间[L,R],求其中任意两个数字的gcd的不同的种类总数。链接:https://codeforces.com/contest/1780/problem/E其中L<=1e9,1<=L<=R<=1e18。tips:本篇题解中除标......
  • 数论分块(除法分块)
    定义数论分块是个很常见的技巧,常用于计算$$\sum_{i=1}^{n}\left[\frac{k}{i}\right]$$思路原理很简单:设\(t_i\in\{x|x=\left[\frac{k}{i}\right]\}\)我们想办法每次......
  • 「学习笔记」分块
    layout:posttitle:「学习笔记」分块date:2021-10-29tags:算法分块莫队暴力分块是一种优化暴力的思想,一般情况下用于查询与修改复杂度差距过大的情况。分块......