242. 一个简单的整数问题——差分思想+树状数组

news/2024/9/23 2:23:19/

给定长度为 N 的数列 A,然后输入 M 行操作指令。

第一类指令形如 C l r d,表示把数列中第 l∼r 个数都加 d。

第二类指令形如 Q x,表示询问数列中第 x 个数的值。

对于每个询问,输出一个整数表示答案。

输入格式
第一行包含两个整数 N 和 M。

第二行包含 N 个整数 A[i]。

接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。

输出格式
对于每个询问,输出一个整数表示答案。

每个答案占一行。

数据范围
1≤N,M≤105,
|d|≤10000,
|A[i]|≤109
输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
Q 4
Q 1
Q 2
C 1 6 3
Q 2
输出样例:
4
1
2
5

分析

  1. 树状数组是单点修改,区间查询,而此题是单点查询,区间修改;所以想到了利用差分,来将此题的操作转换为树状数组的操作;
  2. 求a[x]相当于差分数组tr[1]+tr[2]…+tr[x](sum区间查询);区间加d,a[L~R]+=d,相当于差分数组的L这个位置加上d,r+1的位置减d(两次单点修改add);
#include <bits/stdc++.h>using namespace std;
typedef long long LL;
const int N = 100010;
int n, m;
int a[N];
LL tr[N];//差分数组int lowbit(int x) {return x & -x;
}void add(int x, int c) {for (int i = x; i <= n; i += lowbit(i)) {tr[i] += c;}
}//差分数组求和,sum[x]就是想要查的a[x]值(a[x]=b[1]+b[2]+...+b[x])
LL sum(int x) {LL res = 0;for (int i = x; i; i -= lowbit(i)) {res += tr[i];}return res;
}int main() {cin >> n >> m;for (int i = 1; i <= n; ++i) {cin >> a[i];}//建树状数组,差分for (int i = 1; i <= n; ++i) {add(i, a[i] - a[i - 1]);}while (m--) {char op;int l, r, d;cin >> op >> l;//查询if (op == 'Q') {//查询a[l],相当于[1,l]的前缀和cout << sum(l) << endl;} else {cin >> r >> d;//给区间[l,r]都加上d,相当于下面两个操作//①、l这个位置加上dadd(l, d);//②、r+1的位置减dadd(r + 1, -d);}}return 0;
}

http://www.ppmy.cn/news/4543.html

相关文章

占道经营识别检测系统 yolov5架构

占道经营识别检测系统基于opencvpython 网络架构模型对现场画面中占道经营违规摆摊行为进行实时监测预警。YOLO算法- YOLO算法是一种基于回归的算法&#xff0c;它不是选择图像中有趣的部分&#xff0c;而是预测整个图像中的类和包围框运行一次算法。要理解YOLO算法&#xff0c…

JDBC编程相关知识(实现图书管理系统进阶版)

目录 一、配置MySQL数据库驱动包 二、JDBC常规操作 1、创建数据源 2、建立连接 3、操作数据库&#xff0c;执行sql语句 4、关闭资源 三、JDBC实现图书管理系统 1、建表 2、连接数据库 3、创建实体类 a、Book类 b、BookShelf类 c、User类 d、Administrator类 e、…

毕业设计 ESP32在线墨水屏桌面摆件 -物联网 单片机 嵌入式

0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过…

【Linux权限】文件权限值,权限掩码,粘滞位,普通用户添加信任名单

目录 1.权限分为2种用户&#xff1a;超级用户&#xff0c;普通用户 2.文件类型和访问权限 ​3.权限掩码&#xff08;八进制&#xff09; 4.sudo短暂提升权限 5.粘滞位 1.权限分为2种用户&#xff1a;超级用户&#xff0c;普通用户 超级用户&#xff08;通常为root&#x…

大数据MapReduce学习案例:TopN

文章目录一&#xff0c;案例分析&#xff08;一&#xff09;TopN分析法介绍&#xff08;二&#xff09;案例需求二&#xff0c;案例实施&#xff08;一&#xff09;准备数据文件&#xff08;1&#xff09;启动hadoop服务&#xff08;2&#xff09;在虚拟机上创建文本文件&#…

基于Java毕业设计心灵治愈服务平台源码+系统+mysql+lw文档+部署软件

基于Java毕业设计心灵治愈服务平台源码系统mysqllw文档部署软件 基于Java毕业设计心灵治愈服务平台源码系统mysqllw文档部署软件本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea eclipse 前端技术&#xff1…

PySpark--spark local 的环境部署

Spark环境搭建-Local 环境搭建 基本原理 本质&#xff1a;启动一个JVM Process进程(一个进程里面有多个线程)&#xff0c;执行任务Task Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*]其中N代表可以使用N个线程&#xff0c;每个线程拥有一个cpu core。…

LeetCode 297. 二叉树的序列化与反序列化

今天早上睡起来刷了这么一道题&#xff0c;二叉树的序列化和反序列化 大概意思就是给你一个二叉树&#xff0c;把他转成一个字符串&#xff0c;中间的自定义规则由你定&#xff0c;再根据这个字符串去还原这个二叉树&#xff0c;这道题的话思路不难&#xff0c;写起来有的细节…