首页 > 其他分享 >如何优雅的暴力——分块

如何优雅的暴力——分块

时间:2023-03-25 19:23:09浏览次数:55  
标签:暴力 分块 复杂度 len 优雅 sqrt 块长

前言

近期也是把hzwer的数列分块入门肝完了,感觉分块很玄学(

什么是分块

分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。

分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度。

分块是一种很灵活的思想,相较于树状数组和线段树,分块的优点是通用性更好,可以维护很多树状数组和线段树无法维护的信息。

当然,分块的缺点是渐进意义的复杂度,相较于线段树和树状数组不够好。

不过在大多数问题上,分块仍然是解决这些问题的一个不错选择。

分块的巧妙之处在于对大块通过预处理后能够实现快速对区间信息进行修改,零散块暴力,大块整体修改,使得分块虽然看起来是暴力,但是时间复杂度是 \(O(n \sqrt\n)\) 的。

分块一般要维护的信息

我个人的习惯是维护每个块的头和尾,每个点所在块的编号,以及每个块的标记。
关于块长 \(len\) 一般是把它设为 \(\sqrt\n\) ,具体的数值应该根据题目的数据范围来定。

分块的预处理

定义 \(len\) 为每个块的长度,\(num\) 为块的数量,不难得到

int len = sqrt(n), num = n / len + (n % len ? 1 : 0);
for(int i = 1;i <= num;i ++)
	t[i] = ed[i - 1] + 1, ed[i] = st[i] + len - 1;
for(int i = 1;i <= num;i ++)
	for(int j = st[i];j <= ed[i];j ++)
		pos[j] = i;

下面以LOJ的数列分块入门为例。

数列分块入门1

题意:区间加,单点查询。

很裸的题目,有各种方法做,我这里选择分块。

考虑对每个块维护一个标记 \(tag\) ,修改时遵循零散块暴力,大块

标签:暴力,分块,复杂度,len,优雅,sqrt,块长
From: https://www.cnblogs.com/Svemit/p/17255387.html

相关文章

  • mysql如何优雅删除大表? 看这篇就够了
    MySQL大表删除有次线上用droptablexxx删除200G的大表,导致MySQL连接数暴涨,业务出现大量5XX,“喜提”一个事故报告。看来还是忽略了一行命令背后产生的“蝴蝶效应”,现在让......
  • 暴力测试--CC压测服务器端口
    #coding=utf-8importctypeslibgcc_s=ctypes.CDLL('libgcc_s.so.1')importsocketimportthreading#定义IP地址和端口范围ip_address="192.168.1.45"start_p......
  • 【动态规划】【矩阵快速幂优化】【XR-1】分块
    【XR-1】分块题目描述有一个长度为\(n\)的序列,xht37现在想分块维护它。PinkRabbit要求他只准将序列分成\(PR\)种长度的块。NaCly_Fish要求他只准将序列分成\(N......
  • 优雅的Bitcask
    Bitcask模型:1.日志型的数据文件何谓日志型?就是appendonly,所有写操作只追加而不修改老的数据,就像我们的各种服务器日志一样。在Bitcask模型中,数据文件以日志型只增不减的写......
  • 一款 SpringBoot 项目下最优雅的 HTTP 客户端工具RetrofitHttp
    大家都知道okhttp是一款由square公司开源的java版本http客户端工具。实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http请求。......
  • 优雅!用了这款开发工具,我成了整个公司代码写得最秀的码农
    不知道从什么时候开始,程序员这个职位变得家喻户晓,对程序员的印象也从以前的高深莫测变成如今的加班代名词。对于程序员加班,不懂有话要说。作为大厂的一枚螺丝钉,接到任务的......
  • Mybatis-Flex 一个优雅的 Mybatis 增强框架
    Mybatis-Flex:更灵活、更轻量、更好用特征很轻量,整个框架只依赖Mybatis再无其他第三方依赖只增强,支持Entity的增删改查、及分页查询,但不丢失Mybatis原有功能内......
  • IDEA 如何优雅的分析包冲突
    在工作中经常会遇到包冲突造成的问题.比如:同一个包的不同版本依赖于另一个包的不同版本.严重一点的会造成循环依赖,甚至会导致CI时间超长乃至超时等问题并且这种问......
  • 年终奖10w的同事,写的代码那叫一个优雅!
    0.前言本篇文章是<<代码整洁之道>>的学习总结,通过这篇文章你将了解到整洁的代码对项目、公司和你的重要性,以及如何书写整洁的代码.通过命名、类、函数、测试这四个......
  • 蒲公英(分块)
    Acwing249蒲公英[洛谷]([Violet]蒲公英-洛谷)[Acwing(数据较强)](249.蒲公英-AcWing题库)前言“好诗意的题目啊......那就用很诗意的代码写吧”思路首先,这题......