【高级数据结构】树状数组

news2024/9/24 3:17:50
 

目录

 

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


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

洛谷:树状数组1https://www.luogu.com.cn/problem/P3374

题目描述

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

  • 将某一个数加上 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
// Problem: P3374 【模板】树状数组 1
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3374
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

const int N = 5e6+5;  

int a[N];
ll c[N];   //代表的是 a(i-lowbit(i)+1) --> ai 的和
int n,q;

ll query(ll x){  
	ll s=0;
	for(;x;x-=x&(-x)){
		s+=c[x];
	}
	return s;
}

void modify(ll x,ll s){   //c[x]加上s
	for(;x<=n;x+=x&(-x)){
		c[x]+=s;
	}
}

int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		modify(i,a[i]);
	}
	for(int i=0;i<q;i++){
		ll ty;
		cin>>ty;
		ll x,d;
		cin>>x>>d;
		if(ty==1){
			modify(x,d);
			a[x]=d;
		}
		else{
			cout<<query(d)-query(x-1)<<"\n";
		}
	}
	
	return 0;	

}

 

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

洛谷:树状数组2icon-default.png?t=N6B9https://www.luogu.com.cn/problem/P3368

题目描述

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

  1. 将某区间每一个数加上 x;

  2. 求出某一个数的值。

输入格式

第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。

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

接下来 M 行每行包含 22 或 44个整数,表示一个操作,具体如下:

操作 11: 格式:1 x y k 含义:将区间 [x,y] 内每个数加上 k;

操作 22: 格式:2 x 含义:输出第 x 个数的值。

输出格式

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

输入输出样例

输入 #1复制

5 5
1 5 4 2 3
1 2 4 2
2 3
1 1 5 -1
1 3 5 7
2 4

输出 #1复制

6
10

 

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

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

相关文章

汇报的目标和技巧【研发版】

汇报的组织意义 要做好汇报&#xff0c;需要先理解汇报的意义&#xff0c;这是根源上的指导。直接地说&#xff0c;满足上级的需求就是汇报的价值&#xff0c;而上级需求来自企业运作的需要&#xff0c;这也是各级管理者职责的组成部分。 各级管理者的职责&#xff08;倒序引用…

API声明文件Swagger Injection攻击

Swagger 在API化的世界里&#xff0c;相信无论是前端还是后端开发&#xff0c;都或多或少地被接口维护折磨过。随着API迭代&#xff0c;老旧API文档和SDK需要更新&#xff0c;这是一个耗散研发精力的事情。为解决此类问题&#xff0c;以API为软件能力最终交付物的生态不断演进…

实训笔记7.27

实训笔记7.27 7.27笔记一、Hive数据仓库基本概念&#xff08;处理结构化数据&#xff09;1.1 Hive的组成架构1.1.1 Hive的客户端1.1.2 Hive的驱动程序1.1.3 Hive的元数据库 1.2 Hive和数据库的区别 二、Hive的安装配置三、Hive的相关配置项四、Hive的基本使用方式4.1 使用Hive的…

FS32K144官方提供串口Bootloader对接Matlab串口烧写程序

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 前言 Bootloader升级工具&#xff1a;可用TTL、232、485&#xff08;硬件收发模式&#xff09;,其中的一种&#x…

DP学习第四篇之不同路径II

DP学习第四篇之不同路径|| 63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾&#xff0c;。。。 dp[i][j]: 走到[i, j]位置时&#xff0c;一共多少种路径 状态转移方程 tips: 用之前或…

【业务功能篇55】Springboot+easyPOI 导入导出

Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 代码实现复杂&#xff0c;学习成本较高。 Easypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出…

Golang单元测试详解:单元测试的基本使用方法

Golang 单元测试 Golang 中的单元测试是使用标准库 testing 来实现的&#xff0c;编写一个单元测试是很容易的&#xff1a; 创建测试文件&#xff1a;在 Go 项目的源代码目录下创建一个新的文件(和被测代码文件在同一个包)&#xff0c;以 _test.go 为后缀名。例如&#xff0c…

性能优化 - 前端性能监控和性能指标计算方式

性能优化 - 前端性能监控和性能指标计算方式 前言一. 性能指标介绍1.1 单一指标介绍1.2 指标计算① Redirect(重定向耗时)② AppCache(应用程序缓存的DNS解析)③ DNS(DNS解析耗时)④ TCP(TCP连接耗时)⑤ TTFB(请求响应耗时)⑥ Trans(内容传输耗时)⑦ DOM(DOM解析耗时) 1.3 FP(f…

项目接入星火认知大模型!!!

项目接入星火认知大模型demo 导言 随着国内的语言大模型不断兴起&#xff0c;科大讯飞的星火大模型&#xff0c;阿里的通义千问&#xff0c;百度的文心一言等。 这些大模型给我提供了很好的便利 同时星火大模型提供了 开放api功能 使得我们能够将大模型接入到我们自己的项目当…

又一“邪恶版”ChatGPT出现,专为网络犯罪而生

最近&#xff0c;Hackread 分享了一个恶意聊天机器人 WormGPT 的详细信息&#xff0c;该聊天机器人是为帮助网络犯罪分子进行非法活动而创建的。现在&#xff0c;暗网上又出现了一个名为 FraudGPT 的聊天机器人。这是一个基于订阅的人工智能聊天机器人&#xff0c;可以为网络犯…

【AI可视化---04】点亮数据之旅:发现Matplotlib的奇幻绘图世界!用Python挥洒数据音符的创意乐章——这四篇就够了!

晴川历历汉阳树,芳草萋萋鹦鹉洲。 日暮乡关何处是,烟波江上使人愁。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌟[2] 2022年度博客之星人工智能领域TOP4🌟 🏅[3] 阿里云社区特邀专家博主🏅 🏆[4] CSDN-人工…

2023Java 岗面试,进互联网大厂必备 Java 面试八股文真题解析

前言 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。 很多时候&#xff0c;面试官问的问题会和自己准备的“题库”中的问题不太一样&#xff0c;即使做了复盘&#xff0c;下次面试还是不知道该从何处下手。 为此鄙人软磨硬泡才把阿里 P8 专门归纳…

合并两个有序链表——力扣21

题目描述 法一 递归 class Solution { public:ListNode* mergeTwoLists(ListNode *l1, ListNode*l2){if(l1 nullptr){return l2;} else if (l2nullptr){return l1;} else if (l1->val<l2->val){l1->next mergeTwoLists(l1->next, l2);return l1;} else {l2-&g…

常用的快捷键 -VTK快捷键

按键W --------------------- 网格显示模型 按键S --------------------- 曲面显示模型 按键P --------------------- 显示模型包围框 按键F --------------------- 放大到选取点 按键R --------------------- 重置相机视图 按键A ---------------------- 切换演员模式 按…

SSM框架 基础

1.数据库 2.工程 3.pom 4.web.xml 5.spring配置文件头部 6.实体类 7.StudentMapper接口 8. StudentMapper.xml 9.StudentService 10. StudentServiceImpl 11.StudentController 实战 查询所有 StudentMapper StudentService StudentServiceImpl StudentMapper.xml Stude…

使用jmeter进行接口测试

jmeter介绍 JMeter是Apache基金会Jakarta上的一个纯java开源项目&#xff0c;起初用于基于Web的压力测试&#xff08;pressure test&#xff09;&#xff0c;后来其应用范围逐渐扩展到对文件传输FTP&#xff0c;大型数据库&#xff08;JDBC方式&#xff09;&#xff0c;脚本程…

列表的sort方法和sorted的区别

问题&#xff1a;简述一下列表list的sort方法和sorted的区别 sort是应用在list列表上的方法&#xff0c;sorted可以对所有可迭代的对象进行排序操作 list.sort()不会返回对象&#xff0c;会改变原有的list&#xff0c;即直接在原来的list基础上修改(原列表就地排序)&#xff0…

(链表) 剑指 Offer 35. 复杂链表的复制 ——【Leetcode每日一题】

❓ 剑指 Offer 35. 复杂链表的复制 难度&#xff1a;中等 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 示例 1&#x…

从容应对,探索CAD辅助命令的优秀实践

在CAD设计中&#xff0c;辅助命令是提升效率和精确度的重要工具。熟练掌握并正确运用CAD中的各种辅助命令对于设计师们来说至关重要。本文将为你介绍一些常用的CAD辅助命令&#xff0c;并详细说明它们的功能和使用方法&#xff0c;帮助你更好地利用这些命令完成高质量的设计工作…

Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR

问题陈述 在信息过载的时代&#xff0c;根据上下文含义和用户意图而不是精确的关键字匹配来查找相关搜索结果已成为一项重大挑战。 传统的搜索引擎通常无法理解用户查询的语义上下文&#xff0c;从而导致相关性较低的结果。 解决方案&#xff1a;ELSER Elastic 通过其检索模型…