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

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

相关推荐
倒头就睡的小比特1 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!1 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼1 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark1 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
码流子1 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven1 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark1 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法