P3372 【模板】树状数组 3( 区间修改 + 区间查询 )

P3372 【模板】线段树 1(树状数组(区间修改/查询)) 【代码】P3372 【模板】线段树 1(树状数组(区间修改/查询)) 阅读详情
题目链接:点击进入
题目
思路
代码
//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131 
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e6+10;
const int mod=998244353;
const double eps=1e-9;
const int N=5e3+10;
/*--------------------------------------------*/
inline int read()
{
    int k = 0, f = 1 ;
    char c = getchar() ;
    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
    return k * f ;
}
/*--------------------------------------------*/

int n,q,a[maxn],c1[maxn],c2[maxn];
void add(int x,int val)
{
	for(int i=x;i<=n;i+=lowbit(i))
		c1[i]+=val,c2[i]+=val*(x-1);
}
int getsum(int x)
{
	int sum=0;
	for(int i=x;i>=1;i-=lowbit(i))
		sum+=x*c1[i]-c2[i];
	return sum;
}

signed main() 
{
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>q;
	a[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		add(i,a[i]-a[i-1]);
	}
	while(q--)
	{
		int op,x,y,k;
		cin>>op>>x>>y;
		if(op==1)
			cin>>k,add(x,k),add(y+1,-k);
		else
			cout<<getsum(y)-getsum(x-1)<<endl;
	}
    return 0;
} 
MacOS上如何修改jupyter book的默认打开地址以及如何复制文件路径 记点笔记,才换新系统小半年,还是不太熟悉,所以记录一下笔记,感觉之后也会用到,希望能帮到你们。主要内容是:修改jupyter的默认地址以及复制文件路径。 阅读详情

相关推荐

MPC模型预测控制实战:从理论到代码实现(Python示例)

本文详细介绍了MPC模型预测控制的实战应用,从理论到Python代码实现。通过构建系统模型、预测方程、优化问题及约束处理,展示了如何实现一个完整的MPC控制器。文章还提供了水箱液位控制的应用案例,帮助读者掌握MPC在工业控制中的实际应用。

weixin_42653691的博客 459

洛谷 P3372 【模板】线段树 1

本文介绍了使用线段树解决区间修改和区间查询问题的思路。重点讲解了线段树中的延迟标记(Lazy Tag)机制,通过标记下传(pushDown)和标记更新(addTag)来提高效率。文章提供了详细的代码实现,包括建树、区间修改和查询操作,并强调了long long类型处理大数据范围的必要性。树状数组解法作为补充也简要提及。该解法时间复杂度为O(log n),适合处理大规模数据。核心在于延迟标记的巧妙应用,既保证了正确性又优化了性能。

君义NOIP的博客 1227

电流采样(分流器与霍尔传感器)

霍尔效应霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。霍尔效应是研究半导体材料性能的基本方法。通过霍尔效应实验测定的霍尔系数,能够判断半导体材料的导电类型、载流子浓度及载流子迁移率等重要参数。简单原理如图1所示,半导体薄片两端通以控制电流I,垂直方向施加磁感应强度为B的匀强磁场,d为半导体材料的厚度,k为霍尔常数,它与半导体材质有关,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压,它们之间的关系为。霍尔元件。

weixin_48867130的博客 1万+

区间修改+区间查询【树状数组实现,超越线段树】

参考文章:https://blog.youkuaiyun.com/MM__1997/article/details/76691744 以之前做过的一个线段树模板题为例:洛谷 P3372 线段树1 如何用树状数组实现 区间修改+区间查询 呢?推导数学公式: sum[n] = a[1] + a[2] +…+ a[n] = (d[1]) + (d[1]+d[2]) +…+ (d[1]+d[2]+…+d[n]) = ...

nefu_ljw的博客 1296

Python气象雷达数据处理实战:用PyCINRAD从基数据到PPI图的完整流程

本文详细介绍了使用PyCINRAD库处理气象雷达基数据并生成PPI图的完整流程,涵盖环境配置、数据读取、反射率与速度数据提取、可视化优化等关键步骤。通过实战案例演示如何从原始雷达数据到专业级PPI图像生成,为气象研究和业务应用提供高效解决方案。

yog99的博客 758

Android GNSS 模块分析(三)JNI 层

Android GNSS;定位服务;GPS;NMEA协议;LocationManagerService;导航;

Yang_Mao_Shan的博客 5156

树状数组详解(区间修改和区间查询)

前置芝士 单点修改和区间查询 区间修改和单点查询 引入(洛谷 P3372 【模板】线段树 1) 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上 kkk。 2.求出某区间每一个数的和。 这是线段树的模板题,然而我们要用树状数组去做它! 可以看出这题就像是 单点修改区间查询 和 区间修改单点查询 的升级版,好,那我们就顺着这两道题的思路继续走。 区间修改和区间查询 我们还是利用差分,可以得: ∑i=1nai=∑i=1n∑j=1ibj=n×b1+(n−1)×b2+...+bn=n×∑i=1n

Wu_while的博客 3656

【人工智能】 WebDev Arena:实时AI Web开发竞赛的技术探索与价值

《AI编程竞赛推动Web开发技术创新》摘要:WebDev Arena作为聚焦Web开发领域的实时AI编程竞赛,通过标准化竞技环境检验AI模型在代码生成、问题解决等方面的能力。竞赛覆盖前端、后端等全流程开发环节,采用实时评分机制,推动AI对复杂Web需求的理解和多元技术栈适配。该赛事不仅促进AI编程技术创新,更为Web开发行业与AI技术融合搭建桥梁,有望提升开发效率、降低技术门槛。未来将拓展Web3.0等前沿技术主题,持续推动行业智能化发展。(150字)

奶爸的编程之路,也就一周冷个三天 255

P3372 【模板】线段树 1【题解1】

此篇为第1篇,用线段树做,并讲解线段树相关知识

cyx20091026的博客 910

4.4 直流无刷电机(BLDC):控制器硬件设计

摘要 本文详细阐述了直流无刷电机(BLDC)控制器的硬件设计要点。控制器硬件主要包括微处理器单元、功率驱动模块、信号检测电路、通信接口和电源管理模块。在微处理器选型方面,分析了ARM Cortex-M系列、DSP等架构的适用场景,并对比了不同处理器的性能参数。功率驱动模块设计重点包括栅极驱动电路、逆变桥热管理和电流保护机制。信号检测部分介绍了位置传感器接口和模拟信号调理技术。此外,还讨论了通信接口设计、电源管理方案以及硬件布局与EMC设计规范。最后强调了硬件测试验证的重要性,包括故障注入测试等验证方法。整体

技术工作者 183

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

P3372 【模板】线段树 1【题解2】

本题题解分两篇,此篇为第2篇,用树状数组做。

cyx20091026的博客 990

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏

jks212454的博客 420

【数据结构】平替线段树:树状数组结合差分数组实现区间修改与查询(洛谷P3368 P3372 附C++代码)

而我们树状数组查询的性质就是查询出来前缀和,刚好符合我们公式里的和的查询。据此我们就可以完美地利用树状数组来实现区间修改和区间查询了!我给出如下代码和注释,方便大家阅读和理解。

h_a_o777oah的博客 325

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

支持区间修改和区间查询的树状数组

题目洛谷P3372 【模板】线段树 1 已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 k 求出某区间每一个数的和 树状数组解法 设tree[i]=a[i]-a[i-1](差分) 易得 tree[1]+tree[2]+……+tree[i]=a[i] 则 sum(1,r,a) = a[1]+a[2]+……+a[r-1]+a[r] = tree[1]+(tree[1]+tree[2])+……+(tree[1]+……+tree[r]) = (tree[1]*(r))+(tree[2]*(r-.

书伯的博客 276

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

P3372 【模板】线段树 1(区间加区间和)

每个叶子节点对应序列中的一个元素,非叶子节点对应其子节点的区间的合并信息。线段树的本质是一棵二叉树,它将一个长度为n的序列用一棵二叉树进行表示,每个节点对应序列中的一个区间。我们使用位运算(即 x<<1和x<<1|1)可以加快代码运行速度,看不懂的也可以写 x*2和x*2+1。第二行包含 n 个用空格分隔的整数,其中第 i个数字表示数列第 i 项的初始值。第一行包含两个整数 n, m,分别表示该数列数字的个数和操作的总个数。对于本题,我们维护每个区间的和。2 x y:输出区间 [x, y]内每个数的和。

2402_84701732的博客 1740

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【模板】树状数组的区间加值和区间查询

树状数组可以实现单点修改区间查询,或是差分的区间修改单点查询。【点这里】 那么树状数组能不能实现区间加值区间查询呢? 原始序列为a[]。我们先考虑区间加值,用差分的方式维护一个d[]数组,d[x]表示的是[x,maxn]每个数的增量。 那么如果需要查询1~x的前缀和,需要查的是 sumx=sigma(ai)+d1∗x+d2∗(x−1)+d3∗(x−2)+...+dx∗1sum_x=sigma

zP1nG 894

【树状数组】【P3372】 【模板】线段树 1

Description 给定一个长度为 \(n\) 的序列,有 \(m\) 次操作,要求支持区间加和区间求和。 Limitation \(1 \leq n,~m \leq 10^5\) 序列元素值域始终在 long long 范围内。要求使用树状数组解决 Solution sb线段树板子题 一直听说这题有树状数组做法,今天刚刚明白。 首先区间加和区间求和可以转化成前缀修改和前缀求和。 考...

weixin_30432007的博客 78

P3372 【模板】线段树 1(区间修改区间查询)(树状数组)

P3372 【模板】线段树 1(区间修改区间查询) 题目传送门 解题思路 这题除了用线段树做 还可以用树状数组做 主要就是利用二维树状数组进行维护 AC代码 #include<cstdio> using namespace std; int n,T; long long c[3][1000005]; int lowbit(int x) { return x&(-x); } void update(int x,long long y)//存储 { int xx=x; for(;x

我很菜的好吧 244

树状数组 区间修改区间查询

http://codevs.cn/problem/1082/ 在这道题因为数据类型卡了我1个多小时之后,我终于把它干掉了(洛谷3372也可以用这道题的代码过,复制过去改一下读入顺序就行,目测codevs的数据比较毒瘤) 树状数组 区间修改+区间查询 实在是喜欢树状数组啊!好理解,更重要是好写啊!这次写写区间修改区间查询哈 首先还是上次区间修改单点查询用过的差分思想,我们先搞一个c数组作为差...

weiya040214的博客 2716

洛谷P3372 【模板】线段树 1(树状数组)

摘要:本文介绍了一个使用树状数组解决区间修改和查询问题的算法。给定n个数的序列和m个操作,操作包括将区间[x,y]每个数加k,以及查询区间[x,y]的和。采用差分思想,维护两个树状数组:tree_1存储差分值d[i],tree_2存储d[i]×(i-1)。通过lowbit函数实现高效更新,利用前缀和相减得到区间和。算法时间复杂度为O(mlogn),适用于大规模数据。代码实现包括初始化、区间修改和查询功能,注意使用long long防止数据溢出。

2401_87622134的博客 481

P3372 【模板】线段树 1 题解

原题链接 简要题意: 维护一个数组的区间修改,区间查询。 关于区间问题,其实有很多不错的算法。 当然 树状数组 也可以解决,不过为了给 后一道模板 做铺垫,我们将本题作为 线段树 的模板题讲解。 线段树什么?顾名思义,每个节点都维护了一个线段的信息,并且 线段树是一棵完全二叉树 。 比方说: 其中每个节点上写的三个数分别表示:节点编号,区间左端点,区间右端点 。有些节点只写了 节点编号 ,因为它...

bifanwen的博客 963

【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3372线段树1)

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

Dance Of Faith 607

P3372 【模板】线段树 1(树状数组解法)

P3372 【模板】线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 kk。 求出某区间每一个数的和。 输入格式 第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。 第二行包含 nn 个用空格分隔的整数,其中第 ii 个数字表示数列第 ii 项的初始值。 接下来 mm 行每行包含 33 或 44 个整数,表示一个操作,具体如下: 1 x y k:将区间 [x, y][x,y] 内每个数加上 kk。 2 x y:输出区间 [x, y][x,y

erxiong111的博客 395

【杂】树状数组的区修区查

灰藏完整的推导过程!!!

xiaolongmeiya的博客 678

P3372&&ybtoj【数据结构】2章4题&&4章2题【【模板】线段树1】

【模板】线段树1 题目 P3372 解析 线段树区间查改的方法已经在【模板】树状数组1中讲过了,所以这里只讲树状数组: 首先考虑支持区间修改什么?区间查询?让它滚吧,不难发现只要差分一下就好了 di=ai−ai−1(a0=0,1<=i<=n)d_i=a_i-a_{i-1}(a_0=0,1<=i<=n)di​=ai​−ai−1​(a0​=0,1<=i<=n) 此时只要在lll的位置进行一次正修改,r+1r+1r+1的位置进行一次负修改就好了(刚好抵消) 那么怎么查询呢?

zhanglili1597895的博客 135
上一篇: Codeforces Beta Round #68 - B- Train ( 贪心模拟 )
下一篇: P3367 【模板】并查集
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值