当前位置: 首页 > news >正文

【树状数组】Range Update Queries

题目描述:


给定一个包含 n 个整数的数组,你的任务是处理 q 个以下类型的查询:

  • 将区间 [a,b] 中的每个个值都增加 u
  • 查询位置 k 处的值是多少?
输入:


第一行输入两个整数 n 和 q:分别表示数组元素的数量和查询的数量。
第二行有 n 个整数 x1,x2,...,xn:表示数组的元素。
接下来有 q 行,每行描述一个查询,包含三个或四个整数:

  • 若为 "1 a b u",表示将区间 [a,b] 中的每个元素增加 u
  • 若为 "2 k",表示查询位置 k 处的元素值

约束条件:
1 ≤ n,q ≤ 2*105
1 ≤ xi, u ≤ 109
1 ≤ k ≤ n
1 ≤ a ≤ b ≤ n

输出:


对于每个类型 2 的查询,输出对应的结果。

样例输入

复制

8 3
3 2 4 5 1 1 5 3
2 4
1 2 5 1
2 4
样例输出

复制

5
6

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;int n,q;
ll x[N]{0},p[N];void update(int idx,ll val)
{for(;idx<=n;idx+=(idx&-idx))p[idx]+=val;
}ll sol(int idx)
{ll sum=0;for(;idx>0;idx-=(idx&-idx))sum+=p[idx];return sum;
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n>>q;for(int i=1;i<=n;++i){cin>>x[i];update(i,x[i]-x[i-1]);}while(q--){int c;cin>>c;if(c==1){ll a,b,u;cin>>a>>b>>u;update(a,u);update(b+1,-u);}else {int k;cin>>k;cout<<sol(k)<<'\n';}}	return 0;
}

http://www.dtcms.com/a/328019.html

相关文章:

  • 《Leetcode》-面试题-hot100-栈
  • Apache SeaTunnel 新定位!迈向多模态数据集成的统一工具
  • 亚马逊与UPS规则双调整:从视觉营销革新到物流成本重构的运营战略升级
  • linux下安装php
  • Linux内核编译ARM架构 linux-6.16
  • Node.js 和 npm 的关系详解
  • 能刷java题的网站
  • FPGA即插即用Verilog驱动系列——按键消抖
  • 【JavaEE】多线程之线程安全(中)
  • 第5章 AB实验的随机分流
  • 圆柱电池自动分选机:新能源时代的“质量卫士”
  • 各版本IDEA体验
  • Next.js 中间件:自定义请求处理
  • LeetCode 分割回文串
  • 终端互动媒体业务VS终端小艺业务
  • 本地部署开源媒体中心软件 Kodi 并实现外部访问( Windows 版本)
  • Perl——文件操作
  • 工业相机终极指南:驱动现代智能制造的核心“慧眼”
  • 云原生作业(tomcat)
  • 优选算法 力扣 18. 四数之和 双指针算法的进化 优化时间复杂度 C++ 题解 每日一题
  • Perl——$_
  • Bevy渲染引擎核心技术深度解析:架构、体积雾与Meshlet渲染
  • UE5.3 C++ 动态多播实战总结
  • AtCoder Beginner Contest 418 C-E 题解
  • 数据分析小白训练营:基于python编程语言的Numpy库介绍(第三方库)(上篇)
  • python3 undefined symbol: _Py_LegacyLocaleDetected
  • C语言结构体与内存分配:构建复杂数据结构的基石
  • 【AI驱动的语义通信:突破比特传输的下一代通信范式】
  • Git 常用命令速查表
  • 最终章【1】Epson机器人篇