P3374 【模板】树状数组 1

news2025/2/26 23:02:19

题目描述

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

  • 将某一个数加上 𝑥x

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

输入格式

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

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

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

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

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

输出格式

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

输入输出样例

输入 #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%30% 的数据,1≤𝑛≤81≤n≤8,1≤𝑚≤101≤m≤10;
对于 70%70% 的数据,1≤𝑛,𝑚≤1041≤n,m≤104;
对于 100%100% 的数据,1≤𝑛,𝑚≤5×1051≤n,m≤5×105。

数据保证对于任意时刻,𝑎a 的任意子区间(包括长度为 11 和 𝑛n 的子区间)和均在 [−231,231)[−231,231) 范围内。

样例说明:

故输出结果14、16

1.首先想到的做法

一看到区间加数和求区间段的和,本能的第一反应就是用差分和前缀和,甚至不用差分,因为它只要在一个数加1即可,只要前缀和处理,但是题目给的询问会在某个点加了数后再求区间和,这样就导致了每一次求区间和的时候都要去求一次前缀和这样就导致了时间复杂度爆了,为5e5*5e5,直接导致有三个点因为超时没法过去。有没有不超时的办法呢?有,就是线段树。

2.

线段数可以做到两种操作都为O(longN),大大减少时间复杂度。

线段数主要分为构造树,某个点加数,求区间和。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<math.h>
#include<iomanip>
#include<set>
#include<queue>
#include<stack> 
#include<map>
#include<list>
#include <stdlib.h>
#include<deque>
#include <stdlib.h>
#include <time.h>
#include<cstdlib>
using namespace std;
int n, m, a[500005], f[2000005];//f为线段数
void buildtree(int k,int l,int r)//k是当前线段的编号,l到r为这一区间
{
	if (l == r)//到最底层
	{
		f[k] = a[l];
		return;
	}
	int m = (l + r) / 2;
	buildtree(k + k, l, m);//左子树
	buildtree(k + k + 1, m + 1, r);//右子树
	f[k] = f[k + k] + f[k + k + 1];//当前节点的和
}
void add(int k, int l, int r, int x, int y)//在x处加y
{
	f[k] = f[k] + y;//牵一发而动全身,x之上的都要加
	if (l == r)//叶子节点返回
	{
		return;
	}
	int m = (l + r) / 2;
	if (m >= x)
	{
		add(k + k, l, m, x, y);
	}
	else
	{
		add(k + k + 1, m + 1, r, x, y);
	}
}
int getsum(int k,int l,int r,int s,int t)
{
	if (l == s && r == t)
	{
		return f[k];
	}
	int m = (l + r) / 2;
	if (m >= t)
	{
		return getsum(k + k, l, m,s,t);
	}
	else if (m < s)
	{
		return getsum(k + k + 1, m + 1, r, s, t);
	}
	else
	{
		return getsum(k + k, l, m, s, m) + getsum(k + k + 1, m + 1, r, m+1, t);
	}
}
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	buildtree(1, 1, n);
	for (int i = 1; i <= m; i++)
	{
		int t, x, y;
		cin >> t >> x >> y;
		if (t == 1)
		{
			add(1, 1, n, x, y);
		}
		if (t == 2)
		{
			cout << getsum(1, 1, n, x, y) << endl;
		}
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】表的操作{创建/查看/修改/删除}

文章目录 1.创建表1.1comment&#xff1a;注释信息1.2存储引擎 2.查看表3.修改表3.1add添加列&#xff0c;对原数据无影响3.2drop删除列3.3modify修改列类型3.4change修改列名3.5rename [to]修改表名 4.删除表5.总结 1.创建表 CREATE TABLE table_name (field1 datatype,field…

springboot医院门诊挂号系统-计算机毕业设计源码033123

目 录 摘要 1 绪论 1.1研究背景及意义 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2 医院门诊挂号系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.…

第一百三十八节 Java数据类型教程 - Java boolean数据类型和float数据类型

Java数据类型教程 - Java boolean数据类型 布尔数据类型只有两个有效值:true和false。 这两个值称为布尔值字面量。 我们可以使用布尔值字面量 boolean done; // Declares a boolean variable named done done true; // Assigns true to done布尔变量不能转换为任何其他…

什么是分库分表?它有哪些实现类型?

假如你正在使用关系型数据库开发一款健康类系统。业务发展很好&#xff0c;系统有很多活跃的新老用户&#xff0c;这些用户会和平台的医生团队进行交互&#xff0c;每天可能会生成数万甚至数十万级别的业务数据。这样的话&#xff0c;随着数据量越来越大&#xff0c;系统中的某…

如何选择易用性高的项目管理软件?

随着项目管理在各行各业的广泛应用&#xff0c;选择一款易用性高的项目管理软件变得越来越重要。易用性高的软件可以帮助企业提高工作效率&#xff0c;降低管理成本&#xff0c;同时还能提升团队之间的协作能力。那么&#xff0c;如何选择一款易用性高的项目管理软件呢&#xf…

C++ Linux调试(无IDE)

跨平台IDE编译调试C很方便&#xff0c;如QTCreate 、VSCode、Eclipse等&#xff0c;但是如果只能使用Shell控制台呢&#xff0c;gdb调试的优势就很明显了&#xff0c;在没有IDE的情况下&#xff0c;这个方式最有效。因为上手不是很难&#xff0c;特此整理 参考链接 目录 1、G…

边缘网关在实际应用中的价值与挑战-天拓四方

随着物联网、大数据和人工智能等技术的快速发展&#xff0c;边缘计算逐渐崭露头角&#xff0c;成为推动数字化转型的关键力量。而边缘网关&#xff0c;作为边缘计算的核心组成部分&#xff0c;其重要性不言而喻。本文将以某智能制造企业为例&#xff0c;结合数据分析&#xff0…

MySQL高级-MVCC- readview介绍

文章目录 1、介绍2、ReadView中包含了四个核心字段&#xff1a;3、版本链数据的访问规则&#xff1a;4、不同的隔离级别&#xff0c;生成ReadView的时机不同&#xff1a; 1、介绍 ReadView&#xff08;读视图&#xff09;是 快照读 SQL执行时MVCC提取数据的依据&#xff0c;记录…

微信小程序订单发货管理接入

订单发货管理接入指引&#xff1a;https://mp.weixin.qq.com/cgi-bin/announce?token1148555877&actiongetannouncement&key11671435333v04b2&version1&langzh_CN&platform2https://mp.weixin.qq.com/cgi-bin/announce?token1148555877&actiongetann…

Redis基础教程(十):HyperLogLog

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

掌握IP代理API提取技巧,让你的网络操作更高效!

IP代理在现代网络中扮演着越来越重要的角色。今天&#xff0c;我们将深入探讨IP代理的API提取知识&#xff0c;帮助大家更好地理解和应用这一技术。 IP代理API是什么&#xff1f; IP代理API是提供IP代理服务的接口&#xff0c;允许开发者通过编程方式自动获取和管理代理IP。通…

土壤养分检测仪——助力农田监测

在现代化的农业生产中&#xff0c;精准施肥、科学种植已成为提升作物产量与品质的关键。为了实现这一目标&#xff0c;土壤养分检测仪成为了农田科技的得力助手。这款仪器不仅配备了成品药剂和检测器材&#xff0c;还能在现场进行快速测定&#xff0c;广泛应用于农田土壤养分的…

干式电抗器的工作原理是什么

干式电抗器是电力系统中常用的无功补偿设备&#xff0c;主要用于调节电网的电压、提高功率因数、限制短路电流等。它的工作原理主要是通过在电路中引入一个与负载电流相反的磁场&#xff0c;从而产生一个与负载电流相抵消的电抗力&#xff0c;达到调节电压和功率因数的目的。 干…

昇思25天学习打卡营第12天|linchenfengxue

DCGAN生成漫画头像 通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。 GAN基础原理 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种生成式机器学习模型&#xff0c;是近年来复杂分布上无监督学习最具前景的…

全面详解菲律宾slots游戏本土网盟广告CPI流量效果分析

全面详解菲律宾slots游戏本土网盟广告CPI流量效果分析 一、引言 随着互联网的普及和移动设备的广泛应用&#xff0c;网络游戏行业迅速崛起&#xff0c;成为全球娱乐市场的一大热门。菲律宾作为东南亚地区的重要国家&#xff0c;其网络游戏市场也呈现出蓬勃的发展势头。在这样的…

免费分享:2022年全国地铁站点数据(附下载方法)

数据简介 2022年全国地铁站点数据不仅反应我国城市交通网络的日益完善&#xff0c;也为城市规划、公共交通优化、商业布局、应急响应及智慧城市建设提供了宝贵的数据支持与参考&#xff0c;助力城市发展与居民生活质量的全面提升。 数据属性 数据名称&#xff1a;全国地铁站点…

iPhone苹果手机怎么取消腾讯视频VIP会员自动续费?

腾讯视频会员分为VIP&#xff08;同时在线设备5台、同时播放设备2台&#xff1b;&#xff09;和SVIP&#xff08;同时在线设备8台、同时播放设备3台&#xff1b;&#xff09;&#xff0c;在iPhone苹果手机上开通腾讯视频连续包月、包季、包年后&#xff0c;需要手动取消才能关闭…

全网最全最细的jmeter接口测试教程,建议收藏

在日常工作中&#xff0c;尤其是做接口测试时&#xff0c;我们最经常用到的两个工具&#xff0c;就是Jmeter和postman。今天&#xff0c;我们主要是讲一讲Jmeter在接口测试这一块的一些方式方法。内容比较多&#xff0c;大家可以收藏一下&#xff0c;以后慢慢学。 1&#xff0…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…

AJAX的概述 ,同步和异步的区别 ,AJAX 的交互模型和传统交互模型的区别

一. AJAX的概述 1.1 什么是ajax 同步&#xff1a; 异步&#xff1a; 1.AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 ​ 说明&#xff1a;异步&#xff1a;就是不同步。例如我们向后台发送请求&#xff0c;同步的方式是后台必…