首页 > 其他分享 >【博客】分块

【博客】分块

时间:2024-03-19 16:33:44浏览次数:455  
标签:分块 线段 sqrt 算法 博客 区间 复杂度

分块

前言

顾名思义

分块就是将要维护的数据分成多个块来进行操作

涉及整块的直接在块上操作

涉及块中的暴力操作

暴力即优雅

分块是在线算法

一般跟区间有关系

算法

如果一个序列长度为\(n\)

我们一般取\(\sqrt{n}\)为一个块的长度

这样块的数量也是\(\sqrt{n}\)

原理如下

设我们分成了\(m\)块 每块\(n\)个元素
则\(mn\)是一个定值 为总数量
最坏情况下 我们要遍历\(m-1\)个块
在最后一个块内便遍历\(n-1\)个元素
这样时间复杂度近似是\(m+n\)
根据均值不等式
在\(mn\)一定的情况下
当\(m=n=\sqrt{mn}\)时
\(m+n\)才取最小值

确定好块长和块数

我们就可以将数据分块

分块操作

int block=sqrt(n); //块长
for(int i=1;i<=n;i++)
{
	belong[i]=(i-1)/block+1; //每一个位置的分组
}

然后我们就可以进行一些区间操作

比如区间更新区间查询

区间更新横跨若干块,则只需对完全覆盖的块打上标记对两端剩余的部分暴力更新

和区间更新类似,区间查询对中间跨过的整个块直接利用块存储的信息统计答案对两端剩余的部分可以暴力扫描统计

时间复杂度

区间修改和区间查询等操作利用线段树等数据结构也能实现,时间复杂度为\(O(logn)\)级别

而分块算法的时间复杂度为\(O(\sqrt{n})\)级别,并没有线段树等数据结构的时间复杂度优秀

但是如果遇到区间信息无法快速合并等问题

线段树就不能解决了

所以分块算法可以解决一些线段树解决不了的问题

而且线段树的常数比较大

所以有的问题分块甚至能跑过线段树

附例题

P2357 守墓人

P2801 教主的魔法


引用来源

分块算法详解-CSDN博客

分块算法介绍-CSDN博客

分块思想 - OI Wiki (oi-wiki.org)

侵删

标签:分块,线段,sqrt,算法,博客,区间,复杂度
From: https://www.cnblogs.com/zysssss/p/18083298

相关文章

  • 【博客】左偏树
    左偏树前言左偏树是一棵向左偏的树左偏树是一种能在\(O(\logn)\)之内完成合并的可并堆长这样我们常用左偏树完成以下操作在指定集合中插入一个元素查询集合中最高优先级的元素删除集合中最高优先级的元素删除指定元素合并两个集合性质首先我们要知道左偏树的......
  • 【博客】K-D树
    K-D树前言kd-tree(k-dimensional树的简称),是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)好像跟没说一样K-D树其实是每个结点为K维数值点的二叉树每个结点将某一维划分成两部分一部分为左......
  • 【博客】【入门级】递归
    递归有部分结论代码题目来自网络在文后有链接侵删前言什么是递归?函数反复调用自身即是递归举个栗子递归我在这篇博客里写了这篇博客的链接像不像套娃举个正经栗子比如我们算\(n\)的阶乘\(f(n)\)(阶乘就是\(1*2*3*4*...*n\))以\(f(6)\)为例\(f(6)\)=>\(6\)*$......
  • cuda从入门到精通(六)共享内存和循环分块实现CUDA矩阵乘
    本文系转载,出处:https://mp.weixin.qq.com/s/1w1WFPoUEvVECsurqmvJDw在CUDA编程中,共享内存和循环分块(looptiling)是两种常见的优化策略,它们可以帮助我们提高矩阵乘法的性能。共享内存(SharedMemory):在GPU中,每个线程块(block)都有自己的共享内存。与全局内存相比,共享内存的访问......
  • 新电脑 个人博客迁移
    安装和配置所需要的软件安装Git客户端,安装过程省略,一般默认下一步    下载地址:Git客户端    这个无脑下一步即可无需配置安装nodeJS,安装过程省略,一般默认下一步    下载地址:nodeJS    配置看这位大佬教程:地址拷贝个人博客文件夹中,部......
  • 将博客搬至CSDN
    New·Object将博客搬至CSDN在数字时代的浪潮中,我始终如一地维护着自己的一方网络空间。从最初的个人网站到现在的CSDN博客,每一次的变迁都记录着我的成长与变化。今天,我想和大家分享一下将博客搬迁至CSDN的决定背后的故事,以及这个决定给我带来的一系列连锁反应。记得最初,我的博......
  • 【学习笔记】分块/莫队
    众所周知,分块是一种比较暴力的数据结构。虽说分块效率不高,但它能处理一些树状数组和线段树难以维护的东西(尤其是不具备可拆分性和可合并性的东西)。分块遵循整块维护,块内暴力的原则。所以我们一般先考虑一个暴力算法,再使用分块优化。建立分块:我们定义一个分块的结构体b,分别存......
  • 推荐一个博客园皮肤:awescnb-theme-geek
    参考文章:我的所有做法都是参考本篇文章1.安装主题首先进入到博客后台设置:1.设置皮肤为customer,并且打开JS权限2.勾选禁用模板默认CSS3.复制粘贴配置代码(共三处)页面定制CSS代码#loading{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999;background-co......
  • 初出茅庐的小李博客之串口屏开发一个音乐控制器UI
    串口屏介绍串口屏通常指的是一种带有串口接口的显示屏,可以通过串口与其他设备进行通信和控制。这种屏幕通常具有独立的控制器和显示功能,可以直接接入主控系统,实现信息的显示和交互。开发步骤准备UI素材准备了100张音量的图标,这里面还遇到了个小问题,这么多图片如何批量......
  • [bzoj2120]数颜色/维护队列 (分块)
    数颜色/维护队列[做题笔记]此生第一道不贺题解\(AC\)的分块蓝题!!!题目描述墨墨@hs_mo购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令:\(Q\L\R\)代表询问你从第\(L\)支画笔到第\(R\)支画笔中共有几种不同颜色的......