P3368 【模板】树状数组 2(区间修改 单点查询)

线段树【sugent_tree】基础篇【建树操作(build),区间修改(modify),单点查询(query)】& 洛谷P3368 【模板】树状数组 2 & 【#define】&【<< & >>】 线段树【sugent_tree】基础篇【建树操作(build),区间修改(modify),单点查询(query)】& 洛谷P3368 【模板】树状数组 2 & 【#define】&【>】 阅读详情

 https://www.luogu.org/problemnew/show/P3368


//区间修改 单点查询

#include<iostream>

#include<cstdio>

#include<algorithm>

#include<string.h>

 

using namespace std;

 

#define lowbit(x) (x&(-x)) //计算2^k 

 

const int Max = 500000+5;

int c[Max];//c[i] = a[i – 2^k + 1] + … + a[i],k为i在二进制下末尾0的个数, a为猿给定数组(即初始化时给的值) 

 
//单点修改,仅需修改c[i],求区间和直接用c[i]就可以了 
void Update(int x, int y, int MAX)

{

	while(x <= MAX){

		c[x] += y;

		x += lowbit(x);

	}

}

//区间修改 (部分样例会发生	TLE) 
/*void UpdateSQ(int x, int y, int k, int MAX)
{

	while(x <= MAX){

		c[x] += k;

		x += lowbit(x);
	}
	
	while(y <= MAX){
		
		c[y] -= k;

		y += lowbit(y);
	}
	

}
 */
//a[i-lowbit(i)]+......a[i] +.....a[i-lowbit(i)-lowbit(i-lowbit(i))]+.....a[i-lowbit(i)]+.....a[0]查询 
int Sum(int x)

{

	int sum = 0;

	while(x > 0){

		sum += c[x];

		x -= lowbit(x);

	}

	return sum;

	

}

//区间查询 
void SumSQ(int y, int x)

{

	int sum = 0;

	

	while(y > 0){

		sum += c[y];

		y -= lowbit(y);

	}

	

	while(x > 0){

		sum -= c[x];

		x -= lowbit(x);

	}

	

//	cout << sum << endl;

 

	printf("%d\n", sum);	

}

int main()

{	

	int T, cnt = 1;

	string s;

	

	//cin >> T;

//	scanf("%d", &T);

	

	//while(T--)
	{

		int N, m;

		

	//	cin >> N;

		scanf("%d%d", &N, &m);

			

		memset(c, 0, sizeof(c));

		
		int tmp = 0;
		for(int i=1; i<=N; i++){

			int x;
			
			scanf("%d", &x);
//区间修改需要用到差分...... 
			Update(i, x-tmp, N);	//差分	x-tmp相当于a[i]-a[i-1] 则Sum()所求结果相当于a[i] 
			tmp = x;
		}

		

//		cout << "Case " << cnt++ << ":" << endl;
//		printf("Case %d:\n", cnt++);		

 		for(int i=0; i<m; i++){
			int q;
			int x, y;

			scanf("%d", &q);
			

//			cin >> x >> y;

			if(q == 1){
//区间修改
			int k;
			cin >> x >> y >> k; 
//			UpdateSQ(x, y+1, k, N);

			Update(x, k, N);
			Update(y+1, -k, N);

		}
		
		else {
			cin >> x; 
			cout << Sum(x) << endl;
		}
		
		}
	}

	return 0;

} 

 

P3368 【模板】树状数组 2(树状数组(单点查询+区间修改)) 【代码】P3368 【模板】树状数组 2(树状数组(单点查询+区间修改)) 阅读详情

相关推荐

BP3368_CN_DS_Rev_0.9.pdf

BP3368_CN_DS_Rev_0.9.pdf

树状数组详解!(C++_单点/区间查询_单点/区间修改)

先把这张著名的树状数组结构图摆在最前面,接下来我们就以这张图讲起!        首先图中的A数组就是所谓的原数组,也就是普通的数组形态,C则是我们今天要说的树状数组(可以看出一个数的形状,但其实和树没多大关系) 从图中可以明显看到以下几个式子: C[1]=A[1];C[1]=A[1];C[1]=A[1]; C[2]=C[1]...

ccql's Blog 1353

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

树状数组(二)【区间修改,单点查询】

【区间修改,单点查询】 区间修改 考虑一个数组,频繁的进行区间(l~r)修改,这时候我们会利用差分数组,关于差分数组 因为只需要修改 l 和r+1就可以,复杂度O(1),最后求个前缀和即可。树状数组进行区间修改也一样可以用差分数组来实现。 我们维护一个差分数组,这个差分数组不需要是原数组的差分数组,可以当做是当前变化量的差分数组。显然在初始阶段,没有对任何区间做任何操作,所以这个差分数组全部是0。这样也是方便单点查询,因为这个差分数组的前缀和就是当前值的变化量。 举个例子: 原数组a: 4

weixin_45743427的博客 730

RAGFlow + GraphRAG+ 知识图谱 + QwQ32B探索实践

RagFlow 是一款开源的 RAG(Retrieval-Augmented Generation)引擎,专注于深度文档理解,能够助力企业及个人构建高效的 RAG 工作流程。借助大语言模型(LLM),它可以精准处理各种复杂格式的数据,为用户提供可靠的问答服务,并附上详实的引用依据。

技术引领业务创新 8万+

避坑指南:RK3576+Android14适配移远5G模组(RG200U)时,我遇到的3个‘巨坑’及解决方案

本文详细记录了RK3576芯片适配Android14系统与移远RG200U 5G模组过程中遇到的三大技术难题:RIL服务启动失败、HIDL兼容性矩阵配置错误及ttyUSB权限冲突。通过实战案例提供了动态库拷贝、HIDL版本链声明和SELinux策略调整等解决方案,帮助开发者高效完成5G模组集成,特别适用于基于kernel6.1的嵌入式开发场景。

weixin_30664051的博客 390

树状数组(1.单点修改,区间查询 2.区间修改,单点查询)

一种较高级的数据结构——树状数组,综合降低了数组中修改和查询操作的复杂度,相比于线段树,代码实现更为简短且易理解。

weixin_53024141的博客 2763

XDMA流传输模式

XDMA 流传输模式(Streaming DMA)​ 是 Xilinx FPGA 通过 PCIe 与主机进行 ​实时流式数据传输 的核心机制,

浩瀚之水的专栏 3435

树状数组操作归纳总结

定义树状数组int tr[N]如果题目中已经给出现有的数组,如何把它初始化为树状数组:O(n)先预处理a数组的前缀和数组s,利用来求解。

a123_120的博客 843

【软考之软件设计师】学习笔记

interface 接口implements 实现接口(与接口配套使用)接口里要是有方法定义,子类就会实现。

云轩阁 2533

YOLOv11涨点改进 | NeurIPS2025最佳论文!注意力改进篇| 引入Gated Attention门控注意力模块、太牛了!直接拯救了大模型的发展,助力目标检测、图像分割、图像分类有效涨点

本文提出了一种基于门控注意力机制(GatedAttention)的YOLOv11改进方法。该模块通过在标准注意力机制中引入头部特定的sigmoid门控,有效提升了模型性能和训练稳定性。实验表明,GatedAttention能够增强模型对关键信息的聚焦能力,减少无关区域关注,提高检测精度。同时,门控机制带来的非线性和稀疏性优化了计算效率,并缓解了训练不稳定性问题。文章详细介绍了模块原理、实现代码及三种改进方案配置方法,为YOLOv11在复杂场景下的目标检测提供了有效解决方案。

Ai缝合怪、助力小伙伴高效发论文 495

洛谷 P3368 【模板】树状数组 2 区间修改 单点查询

洛谷 P3368 【模板】树状数组 2 区间修改 单点查询 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数数加上 x; 求出某一个数的值。 输入格式 第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。 接下来 M 行每行包含 2 或 4个整数,表示一个操作,具体如下: 操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数加上 k; 操作 2: 格式:2 x 含义:输

weixin_46283740的博客 327

【人工智能】Open WebUI 安装指南 ( 基于Docker下载和使用Open WebUI 、通过本地运行项目源码进行搭建Open WebUI)

Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线操作。它支持各种 LLM 运行程序,包括 Ollama 和 OpenAI 兼容的 API。社区:https://openwebui.com/

奶爸的编程之路,也就一周冷个三天 2万+

P3368 【模板】树状数组 2( 区间修改 + 单点查询 )

题目链接:点击进入 题目 思路 树状数组实现-> 区间修改 + 单点查询 c [ i ] = a ( i - 2 ^ k + 1 ) + … + a [ i ] ( 设节点编号为 i ,那么这个节点管辖的区间有 2 ^ k( 其中 k 为 i 二进制末尾 0 的个数)个元素,且最后一个元素为 a [ i ] 。) lowbit ( i ) => i & -i 计算 i 对应的 2 ^ k add 函数更新 i 这位以及它之后的包含它的区间对应的 c 数组 getsum 函数求 1

Cosmic_Tree的博客 315

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统(深度学习模型+UI界面+训练数据集)

随着人工智能技术在农业领域的深入应用,基于深度学习的害虫检测系统已成为智慧农业的重要组成部分。本文详细介绍了一种基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的农作物害虫检测系统,涵盖算法原理、数据集构建、模型训练、系统实现及完整代码。该系统能够实时检测并识别多种农作物害虫,为农业生产提供精准的病虫害监测解决方案。

YOLO 273

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

P3368 【模板】树状数组 2 (区间修改,单点查询)

本题链接:【模板】树状数组 2 - 洛谷 输出 6 10 根据题意,这里是需要区间添加值,单点查询值。如果区间添加值中暴力去一个个加值,肯定会TLE,所以我们这里运用到了模板树状数组的重要作用了。 根据 差分 的性质,我们知道,区间加值,我们可以构造一个前缀和数组来表示当前原数组的元素值,对此,进行区间的修改,有效的避免O(n)的时间复杂度。所以我们可以结合,树状数组的前缀和 + 差分 性质,达到区间修

Angindem博客 637

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

P3368 【模板】树状数组 2(区间修改+单点查询)

const int N=1e5+5; int n,m,t; int i,j,k; int a[N]; struct Node { int l,r; ll sum,lazy; void update(int x){ sum+=1ll*(r-l+1)*x; lazy+=x; } }node[N<<2]; void push_up...

C_Dreamy的博客 551

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【洛谷】P3368 【模板】树状数组 2 (单点修改+区间查询或区间修改+单点查询的作用)

库库好用家人们!

m0_74969835的博客 261

P3368 【模板】树状数组 2(实现区间修改&单点查询)

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[...

137

Luogu P3368 【模板】树状数组 2 [区间修改-单点查询]

P3368 【模板】树状数组 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操...

weixin_30355437的博客 124

P3368 【模板】树状数组 2(区间修改单点查询)

这是树状数组的基础操作,和差分结合在一起,其实这种操作我更习惯于线段树的写法。不过树状数组代码短,执行效率高,值得记录一下。

starlet_kiss的博客 166

洛谷P3368 【模板】树状数组 2-(区间修改,单点查询)

题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上x; 求出某一个数的值。 输入格式 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区...

m0_56312312的博客 174

题解报告:Luogu P3368 【模板】树状数组 2(区间修改,单点查询)

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将...

weixin_30484247的博客 150

洛谷 P3368 【模板】树状数组 2 如题(区间修改+单点查询)

P3368 【模板】树状数组 2 时空限制1s / 128MB 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数...

weixin_30951389的博客 154
上一篇: 历届试题 国王的烦恼
下一篇: 1082 线段树练习 3 (区间修改&&区间查询)
KLFTESPACE
博客等级 码龄9年 66粉丝 655原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值