P3374 【模板】树状数组 1 题解

# P3374 【模板】树状数组 1

题目描述

如题,已知一个数列,你需要进行下面两种操作:

  • 将某一个数加上 x

  • 求出某区间每一个数的和。

输入格式

第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。

第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。

接下来 m 行每行包含 3 个整数,表示一个操作,具体如下:

  • `1 x k` 含义:将第 x 个数加上 k

  • `2 x y` 含义:输出区间 \[x,y\] 内每个数的和。

输出格式

输出包含若干行整数,即为所有操作 2 的结果。

输入输出样例 #1

输入 #1

```

5 5

1 5 4 2 3

1 1 3

2 2 5

1 3 -1

1 4 2

2 1 4

```

输出 #1

```

14

16

```

说明/提示

【数据范围】

对于 30\\% 的数据,1 \\le n \\le 81\\le m \\le 10

对于 70\\% 的数据,1\\le n,m \\le 10\^4

对于 100\\% 的数据,1\\le n,m \\le 5\\times 10\^51\\le x\\le y\\le n-2\^{31}\\le k\<2\^{31}

数据保证对于任意时刻,a 的任意子区间(包括长度为 1n 的子区间)和均在 \[-2\^{31}, 2\^{31}) 范围内。

样例说明:

!\[\](https://cdn.luogu.com.cn/upload/pic/2256.png)

故输出结果 1416

题面为上 ↑ ↑

接下来,正文:

首先,我们可以分析一下本题的本质,即他在考察什么。

例如:我们可以把

  • 将某一个数加上 x;

删除,就会发现这题是一个前缀和,当然,如果你把他加上去,就会发现他不是递归。

不管了,先发代码

复制代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int c[500005];
void add(int x,int y){
	for(;x<=n;x+=(x&-x))c[x]+=y;
}
int query(int x){
	int sum=0;
	for(;x;x-=(x&-x))sum+=c[x];
	return sum;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int a;
		cin>>a;
		add(i,a);
	}
	while(m--){
		int op,x,y;
		cin>>op>>x>>y;
		if(op==1)add(x,y);
		else cout<<(query(y)-query(x-1))<<"\n";
	}
	return 0;
}

接下来,解释:

  • n数组长度。
  • m操作次数。
  • c[500005]树状数组。

add函数:

  • 作用:把第 x 个数字,加上 y

query函数:

  • 作用:算出从第 1 个,到第 x 个数字的全部总和

主函数:

  1. 先输入两个数:一共几个数字、要做几次操作。

  2. 输入初始的每个数字,用 add 把它们存进数组里,相当于把所有数字都初始化

  3. 循环处理每一次操作:

    1. 读入操作类型 op 和两个数字 x、y

    2. 如果 op=1改数 ,第 x 个数加上 y

    3. 如果不是 1(就是2):求 第 x 个 until 第 y 个 之间所有数的和:

      1 to y 的总和 减去 1 to (x-1) 的总和,剩下的就是中间一段的和,然后输出结果。

then,没了。

so,the end..................。

咋还在看?没了..................

The End

你可千万别以为没了..........................................但可惜是真的没了

相关推荐
杨航 AI4 小时前
** AI 面试算法 50 题清单**,不是单纯的 LeetCode 题号列表,而是按照“**考察概率 × 面试价值 × 你当前准备方向**”排序
算法·leetcode·面试
m0_7202450111 小时前
1543.统计好三元组(简单)
开发语言·算法
To_OC11 小时前
LC 560 和为 K 的子数组:前缀和配哈希表,这对组合我是真的服了
javascript·算法·程序员
hans汉斯12 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
叠层归一研究院12 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
其美杰布-富贵-李13 小时前
08 进阶评估指标与算法特定指标
人工智能·算法
.道阻且长.14 小时前
5.LeetCode算法习题讲解--双指针--有效三角形的个数
算法·leetcode·职场和发展
我是海飞14 小时前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理
wabs66615 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
lsylalalala17 小时前
常见的排序算法1
数据结构·算法·排序算法