首页 > 其他分享 >分块 学习笔记

分块 学习笔记

时间:2024-05-11 15:30:06浏览次数:21  
标签:单点 分块 int pos 笔记 学习 算法 区间

什么是分块

分块,顾名思义是一种将数据分成多块,以实现一些功能的算法。

分块算法实质上是一种是通过将数据分成多块后在每块上打标记以实现快速区间修改,区间查询的一种算法。其均摊时间复杂度为 \(O(\sqrt{n} )\)

分块的具体操作

分块

void create() {
	t=sqrt(n);
	for(int i=1;i<=t;i++) { //每个块的区间 
		l[i]=(i-1)*t+1;
		r[i]=i*t;
	}
	if(r[t]<n) { t++;l[t]=r[t-1]+1,r[t]=n; }
	
	for(int i=1;i<=t;i++) {
		for(int j=l[i];j<=r[i];j++){
			pos[j]=i; //每个数对应的块	
		}
	}
	/*一些预处理*/
}

一些操作

单点操作

区间操作

//区间修改  
void change(int l,int r,int d) {
	int p=pos[l],q=pos[r];
	if(p==q) {
		for(int i=l;i<=r;i++) a[i]+=d;
		//sum[p]+=d*(r-l+1); 
		/*同时需要注意一些数据的更新,如区间和*/
	}
	else {
		for(int i=p+1;i<=q-1;i++) add[i]+=d;
		for(int i=l;i<=R[p];i++) a[i]+=d;
		
		//sum[p]+=d*(R[p]-l+1);
		/*同时需要注意一些数据的更新,如区间和*/
		
		for(int i=L[q];i<=r;i++) a[i]+=d;
		
		//sum[q]+=d*(r-L[q]+1);
		/*同时需要注意一些数据的更新,如区间和*/
	}
	return;
}
//区间查询 区间和 
int ask(int l,int r) {
	int p=pos[l],q=pos[r];
	int ans=0;
	if(p==q) {
		for(int i=l;i<=r;i++) ans+=a[i];
		ans+=add[p]*(r-l+1);
	}
	else {
		for(int i=p+1;i<=q-1;i++) ans+=sum[i]+add[i]*(R[i]-L[i]+1);
		for(int i=l;i<=R[p];i++) ans+=a[i];
		ans+=add[p]*(R[p]-l+1);
		for(int i=L[q];i<=r;i++) ans+=a[i];
		ans+=add[q]*(r-L[q]+1);
	}
	return ans;
}

后言

参考资料

代码

标签:单点,分块,int,pos,笔记,学习,算法,区间
From: https://www.cnblogs.com/wh1sky/p/18186589

相关文章

  • DSP学习笔记之IIC
    IIC简介IIC总线是同步通信的一种特殊形式,是一种串行,半双工的通信,I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。IIC分为硬件IIC和软件IIC,DSP中有硬件IIC,但是不方便拓展,所以日常使用时使用软件IIC居多。IIC总线通信过程主机发送起始信号启用总线主机发送......
  • DSP学习笔记之SPI
    DSP学习笔记之SPISPI介绍SPI的全称是"SerialPeripheralInterface",意为串行外围接口。SPI是一种高速的,全双工,同步的通信总线,SPI采用主从方式工作,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(主设备输出从设备输入)、SCLK(时钟)、C......
  • SciTech-Mathmatics-ProbabilitiesAndStatistics-Distribution-is-all-you-need: 概率
    Distribution-is-all-you-need概率统计到深度学习,四大技术路线图谱,都在这里!https://github.com/graykode/distribution-is-all-you-need自然语言处理路线图:数学基础->语言基础->模型和算法项目作者:Tae-HwanJung,Github:graykode,2019-09-3013:35,选自Github自然......
  • salesforce零基础学习(一百三十六)零碎知识点小总结(八)
    本篇参考:SalesforceLWC学习(七)Navigation&Toasthttps://developer.salesforce.com/docs/platform/lwc/guide/use-navigate-url-addressable.htmlhttps://help.salesforce.com/s/articleView?id=release-notes.rn_lwc_UrlAddressable.htm&release=250&type=5Sal......
  • 图机器学习入门:基本概念介绍
    图机器学习(GraphMachineLearning,简称GraphML)是机器学习的一个分支,专注于利用图形结构的数据。在图形结构中,数据以图的形式表示,其中的节点(或顶点)表示实体,边(或链接)表示实体之间的关系。本篇文章将从基础开始介绍什么是图,我们如何描述和表示它们,以及它们的属性是什么。图论是在1......
  • gRPC入门学习之旅目录
     gRPC入门学习之旅(一)gRPC入门学习之旅(二)gRPC入门学习之旅(三)gRPC入门学习之旅(四)gRPC入门学习之旅(五)gRPC入门学习之旅(六) gRPC入门学习之旅(七)gRPC入门学习之旅(八)......
  • gRPC入门学习之旅(八)
     gRPC入门学习之旅(一)gRPC入门学习之旅(二)gRPC入门学习之旅(三)gRPC入门学习之旅(四)gRPC入门学习之旅(五)gRPC入门学习之旅(六) gRPC入门学习之旅(七) 3.7、添加proto协议文件1.将服务端项目Demo.GrpcService中的Protos目录中的Grpc协议文件复制过来,如下图所示:......
  • 软件测评笔记03--软件测试
    软件测试的对象程序、数据、文档 ,跟人没有关系 测试用例要设计有效的功能测试用例,应该做到1、测试用例应该100%地覆盖测试业务需求2、利用场景法模拟核心业务流程的正确执行3、利用场景法设计测试用例时,往往是一个业务流程需要多条验证数据4、利用边界值法设计测试用例,......
  • 文件IO学习【三】
    目录系统IO接口说明概念解释标准IO和系统IO的区别常用系统IO函数介绍打开文件关闭文件文件读取文件写入位置偏移系统IO接口说明概念解释由于Linux系统下“一切皆文件”,也就是Linux系统下的数据和程序都是以文件的形式存储的,所以Linux内核会提供一组操作文件的函数接口,这组函数......
  • 数据结构学习01--栈
    栈栈的特性栈的基本结构我们可以把栈想象成一个装有弹珠的瓶子,先放进去的弹珠在瓶子底部,每次只能将顶部的弹珠倒出。栈的特点由图可以很好的知道后进先出栈的实际应用简单栈栈的概念非常简单,但把这个数据结构运用得当是需要充分理解的。应用1:判断字符串是否合法特殊情......