洛谷P3368 【模板】树状数组 2

树状数组(入门附模板) 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为Fenwick树,最早由Peter M. Fenwick于1994年以A New Data Structure for Cumulative Frequency Tables为题发表在SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和, 区间和。——源自百度百科。 阅读详情

题目描述

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

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

2.求出某一个数的和

输入输出格式

输入格式:

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

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

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

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

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

输出格式:

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

输入输出样例

输入样例#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

说明

时空限制:1000ms,128M

数据规模:

对于30%的数据:N<=8,M<=10

对于70%的数据:N<=10000,M<=10000

对于100%的数据:N<=500000,M<=500000

样例说明:

故输出结果为6、10

一道值得一练的模板题。

思路:

既然是树状数组模板题,自然要用树状数组。 其实线段树也可以过。

但是看了数据范围,发现单纯的区间更新肯定会TLE。

所以要用差分维护。

这里在读入时,直接借用add()函数,将树状数组存为差分后数列。

剩下的操作就很简单了。

代码:

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

const int MAX_N=500000;
int n,m,p,q,x,y,flag;
int bit[MAX_N+1],a[MAX_N+1];

int sum(int i)
{
	int s=0;
	while (i>0)
	{
		s+=bit[i];
		i-=i&-i;
	}
	return s;
}

void add(int p,int q)
{
	while (p<=n)
	{
		bit[p]+=q;
		p+=p&-p;
	}
}

int main()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		add(i,a[i]);
		add(i+1,-a[i]);
	}
	for (int i=1;i<=m;i++)
	{
		scanf("%d",&flag);
		if (flag==1)
		{
			int p,q,k;
			scanf("%d%d%d",&p,&q,&k);
			add(p,k);
			add(q+1,-k);
		}
		if (flag==2)
		{ 
			int x;
			scanf("%d",&x);
			printf("%d\n",sum(x));
		}
	}
	return 0;
}


【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3368树状数组2) 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 阅读详情

相关推荐

题解:洛谷 P3368 【模板】树状数组 2

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。,分别表示该数列数字的个数和操作的总个数。输出包含若干行整数,即为所有操作。个用空格分隔的整数,其中第。#普及+# #树状数组#本文分享的必刷题目是从。

团爸讲算法 1144

[洛谷]P3368 【模板】树状数组 2 (#树状数组+差分)

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数加上k...

A.pro的博客 526

不用Root!这些隐藏代码能一键开启安卓诊断端口(小米/OPPO/魅族机型实测)

本文提供了一份无需Root权限即可开启安卓手机诊断端口的实用指南。通过拨号盘输入特定隐藏代码,小米、OPPO、魅族等机型的用户可以一键激活此工程模式,从而连接电脑进行基带数据备份(如QCN文件)或故障排查。文章详细列出了各品牌指令、操作验证步骤,并强调了备份IMEI等关键数据的重要性与操作风险,旨在帮助用户在紧急情况下修复网络问题。

weixin_29260291的博客 273

树状数组的模板题

思路:这道题的思想很简单,二维区间修改,我们首先想到的就是二维差分,然后在使用树状数组进行单点查询即可。思路:看到这样的问题,我们都会头大(没思路,烦死了!我们可以基于第二题的。思路:这同样也是一道模板题,对于区间修改,我们首先会想到的是。操作输出一行,每行有一个整数,表示所求的结果。操作输出一行,每行有一个整数,表示所求的结果。操作输出一行,每行有一个整数,表示所求的结果。操作,输出一个整数,表示对于这个操作的回答。操作,输出一个整数,表示对于这个操作的回答。操作,输出一个整数,表示对于这个操作的回答。

weixin_45652283的博客 522

本地服务器搭建Uptime Kuma网站监控服务

本文主要介绍如何在Linux系统中一键部署Uptime Kuma运维监控服务,并将这个服务映射至公网实现随时随地远程访问。如果您像我一样在服务器上托管了多个网站,并且没有足够的时间来手动检查每个网站的在线状态,那么当出现问题时,您可能无法及时收到通知来处理这些问题。因此,搭建一个在线监控服务是很有必要的,它可以在状态异常时提醒您,以便您能够及时处理问题,确保网站的稳定性和可用性。监控服务有很多,我最终选择了Uptime Kuma,因为Uptime Kuma是开源免费的,

Tiam_cr的博客 1822

P3368 【模板】树状数组 2 (详解

P3368 【模板】树状数组 2 的详解

u010212352的博客 518

PotPlayer播放4K HDR电影时,如何正确设置LAV解码器与MadVR渲染器避免色彩失真?

本文详细介绍了如何在PotPlayer中正确配置LAV解码器与MadVR渲染器,以解决播放4K HDR电影时的色彩失真问题。从组件安装、参数设置到显卡协同配置,提供了一套完整的端到端解决方案,帮助影音爱好者获得最佳的视觉体验。

weixin_28732953的博客 440

洛谷 P3368 【模板】树状数组 2

树状数组 前缀和 差分 单点查询 区间修改 洛谷题解 C++代码 附注释

一只摸鱼的bbc 1194

ReelShort Android 逆向实战:Frida Hook 定位 sign 与 requestTime 算法

一个动态变化的 sign,如何从海量 so 逻辑中精准定位并完整复现?本文以海外短剧 App ReelShort 为例,实战拆解搜索、列表与详情接口的分析过程:从 Charles 抓包锁定关键参数,到 jadx 定位 native 函数,再借助 Frida Hook 验证加密结果;逐步还原 requestTime 的生成机制及 sign 的 HMAC-SHA256 签名逻辑。全文记录关键思路、踩坑与验证方法,带你建立一套可迁移的 Android 接口逆向分析流程。

weixin_64116813的博客 456

23、变压器与电抗器知识详解

本文详细介绍了电力变压器的基本原理、等效电路、测试方法及多种运行方式,涵盖双绕组与自耦变压器的建模与应用。深入探讨了变压器极性判断、并联运行条件、电压调节技术,并扩展至非线性、磁滞、EMTP和高频模型,用于瞬态分析。同时阐述了地磁感应电流(GIC)的影响及对偶建模方法。最后系统介绍了各类电抗器的应用场景与特性,包括限流、无功补偿、滤波及特殊用途电抗器,全面覆盖电力系统中变压器与电抗器的核心知识。

eee77的博客 150

【洛谷】P3368 【模板】树状数组 2

题目地址: https://www.luogu.com.cn/problem/P3368 树状数组的应用。题目要求已知一个数组,回应以下两种操作: 1、将某一区间[a,b][a,b][a,b]每个数都增加xxx 2、求某位置aaa的数值 这两个操作容易让人想到差分数组,因为差分数组对操作1的效率很高,是O(1)O(1)O(1)。例如对于数组[1,5,4,2,3][1,5,4,2,3][1,5,4,...

数学、算法爱好者的博客 331

NetSuite软件二次开发:NetSuite二次开发最佳实践与案例分析

SuiteScript是NetSuite提供的一种用于二次开发的脚本语言,它基于JavaScript,但添加了特定的API和框架,以支持NetSuite平台的业务逻辑开发。SuiteScript有两种版本:SuiteScript 1.0和SuiteScript 2.0,后者提供了更现代的面向对象编程模型,增强了代码的可读性和可维护性。NetSuite允许用户自定义字段以满足特定的业务需求。这些字段可以添加到现有的记录类型中,也可以用于自定义记录。自定义字段可以是文本、数字、日期、下拉列表等多种类型。

kkchenjj的博客 1465

洛谷:P3368 【模板】树状数组 2 Java题解

题目要求实现一个支持区间修改和单点查询的数据结构。树状数组结合差分技术是解决这类问题的理想选择,因为它可以在O(log n)时间内完成区间更新和单点查询。该实现能够高效处理题目给定的最大数据规模(n,m ≤ 500000)。对于更大的数据规模,可以考虑进一步优化IO处理或使用更高效的数据结构。:O(n),用于存储树状数组和原始数组。• 区间更新:O(log n)• 单点查询:O(log n)

Java爱好者,热爱分享,信仰开源! 411

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1733

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

洛谷 - P3368[模板]树状数组2

题目链接:https://www.luogu.org/problemnew/show/P3368 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入格式 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含2或4个整数,表...

ityanger的技术栈 2452

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

洛谷——P3368 【模板】树状数组 2

https://www.luogu.org/problem/show?pid=3368 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下...

agcozdwdfvds08078的博客 116

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【模板】树状数组 2(洛谷-P3368)

题目约定元素的绝对值不大于2^30(逼近int的极限 2^31−1)。树状数组C[i]存储的是多个差分值的叠加,且后续有多次区间累加操作,有概率在中途计算时爆int产生负数。全员上long long更优。当修改区间右端点y=N时,会访问到N+1的位置。如果数组只开了刚好500000,就会越界。数组大小务必多开个10到15的余量(如500015百万级别的输入输出,不要直接使用cin/cout,要配合ios::sync_with_stdio(false);cin.tie(0);不要使用endl。

布心老混子 所有代码均老混子本人远古手搓 易错点均为学生真实场景 博客文章部分借助ai生成 845

洛谷P3368 【模板】树状数组 2 [差分思想]

链接:P3368 这里需要首先知道差分思想的利用 如果有一个数组为 a[5]={1,4,3,2,5}; 那么则他的差分数组为 b[5]={1,3,-1,-1,3} 我们这里可以发现 对于任意的Ai 他的值就等于B1+B2+…+Bi 那么我们便可以利用这个思想 来进行区间同时加一个数 若现在我们要在[x,y]进行同时加上一个数k 那么我们便可以利用差分数组b 在b[x]的地方加上k 在b[y+1]...

秃头交易站. 261

洛谷 P3368:【模板】树状数组 2 ← 差分

树状树状的“区间更新”操作,通常指将区间 a[i] ~ a[j] 中的每个元素都加 k。 树状数组的‌“区间更新”操作通常通过‌差分数组‌实现,核心思想是将“区间更新”转化为两次“单点更新”。原因在于树状数组的经典操作是“单点更新、区间查询”,那么在遇到“将区间 a[i] ~ a[j] 中的每个元素都加 k,输出第 x 个数的值”等“区间更新、单点查询”的问题时,就需要利用差分的思想,将“区间更新、单点查询”问题转换为树状数组擅长的“单点更新、区间查询”问题后进行求解。

hnjzsyjyj的专栏 346

洛谷 P3374【模板】树状数组1、P3368【模板】树状数组2

P3374【模板】树状数组1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 xxx 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,mn,mn,m ,分别表示该数列数字的个数和操作的总个数。第二行包含 nnn 个用空格分隔的整数,其中第 iii 个数字表示数列第 iii 项的初始值。 接下来 mmm 行每行包含 333 个整数,表示一个操作,具体如下: 1 x k 含义:将第 xxx 个数加上 kkk 2 x y 含义:输出区间 [x,y][x,y][x,y] 内

memcpy0的博客 733

洛谷 P3368 【模板】树状数组 2 区间修改 单点查询

洛谷 P3368 【模板】树状数组 2 区间修改 单点查询 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数数加上 x; 求出某一个数的值。 输入格式 第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。 接下来 M 行每行包含 2 或 4个整数,表示一个操作,具体如下: 操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数加上 k; 操作 2: 格式:2 x 含义:输

weixin_46283740的博客 327

树状数组 【模板2】洛谷 P3368

树状数组 【模板2】洛谷 P3368题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x2.求出某一个数的和输入输出格式输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3或4个整数,表示一个操作,具体如下:操作1: 格式:1 x y k 含义:将区间[x

智慧之神的博客 495
上一篇: NOI2002 洛谷P1196 VijosP1443 银河英雄传说
k43_ween
博客等级 码龄9年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值