news 2026/7/15 4:51:32

前缀和的前缀和

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前缀和的前缀和
题目描述

对于一个长度为的序列,其前缀和为前个元素的和,即。而前缀和的前缀和就是把前缀和序列作为原序列,再求一次前缀和。记再次求得的前缀和序列的第位为

现在给定一个长度为的序列,要执行次操作,有两种操作:

将的值改为

询问的值

输入格式

第一行两个整数n,m,分别表示序列长度和操作个数 接下来一行有n个数,即给定的序列a1,a2,...,an 接下来m行,每行对应一个操作,格式见题面

输出格式

对于每个询问操作,输出一行,表示所询问的SS[i]的值

样例

【样例1输入】

5 3 1 2 3 4 5 Query 5 Modify 3 2 Query 5

【样例1输出】

35 32

【样例2输入】

5 3 0 0 0 0 0 Query 5 Modify 1 1 Query 5

【样例2输出】

0 5

【样例3输入】

5 3 11 45 51 77 32 Query 1 Modify 3 93 Query 4

【样例3输出】

11 442
数据范围与提示

1<=N,M<=100000,0<=Ai<=100000

保证输入合法,保证答案在long long 范围内

一些想法

这道题可以用双树状数组,但是不要用差分数组(因为这道题是求前缀和,而差分数组适用于区间求和,所以这题不适合用差分数组)。

先定义三个数组,一个储存原始数组的数,两个树状数组,用于处理前缀和。然后输入序列的数,然后将序列的数放入树状数组第 i 个位置。

输入操作,如果是修改操作,因为我们的函数是增加或减少的修改函数,但是这里是直接改变数值,那么我们可以先算出改变后的数与要改变的数差是多少,然后用修改函数将要改变的数增加差值就行了(修改树状数组),然后将原数组中要改变的数直接变成改变后的数,使三个数组同步。

查询前缀和的前缀和操作:直接调用函数输出,剩下的在自定义函数写即可。

自定义函数:

lowbit 函数:找一个数二进制中最后一个 1,树状数组划分区间用 lowbit 实现。

修改函数:这次也要新开一个数增加(不能用原数直接加),将维护数组的树状数组加增加的值(第一个数组),将维护 数组 × 位置(第二个数组) 也增加值(更新两个数组),注意这里乘的位置是函数调用的位置,不是循环中到达的位置。

通用查询数组前缀和函数(查询数组 1 ):这个和之前的一样,求数组 1~对应数 的前缀和,除了在变量多加一个数组(因为不是固定数组,可能是不同的数组,所以直接用调用时的数组),也是向下跳转区间,累加,返回区间和(也就是将一个区间分解成多个小区间,累加起来)。

求前缀和的前缀和( 查询数组 2 )函数:公式:(当前位置+1) × (维护数组的数组前缀和) - (维护数组×位置的数组前缀和)。作用:利用双树状数组快速计算原始数组前缀和的前缀和。这里求两个数组的前缀和要用到通用查询数组前缀和函数(查询数组1)。

注意:要用 long long,以免超出界限。

AC代码

#include<bits/stdc++.h> using namespace std; long long n,m,a[100010],b1[100010],b2[100010]; long long lowbit(long long x){ return x&-x; } void zs(long long x,long long y){//修改 for(long long i=x;i<=n;i+=lowbit(i)){ b1[i]+=y; b2[i]+=x*y; } } long long sm1(long long b[],long long x){//查询函数1 long long sum=0; for(;x>0;x-=lowbit(x)) sum+=b[x]; return sum; } long long sm(long long x){//查询函数2 return (x+1)*sm1(b1,x)-sm1(b2,x); } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ cin>>a[i]; zs(i,a[i]); } for(int i=1;i<=m;i++){ string p; cin>>p; if(p=="Modify"){ int x,y; cin>>x>>y; int s=y-a[x]; a[x]=y; zs(x,s); } else{ int x; cin>>x; cout<<sm(x)<<endl; } } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 8:52:20

那些棘手问题往往不是在加班到深夜时解决的

有个挺玄的现象&#xff1a;那些困扰了好几天的棘手问题&#xff0c;往往不是在加班到深夜时解决的&#xff0c;反而是在放松喝咖啡、散步&#xff0c;甚至洗澡的时候突然想通的。这不是玄学&#xff0c;是真实的心理机制在起作用。焦虑会让大脑变窄如果带着焦虑和紧绷的情绪去…

作者头像 李华
网站建设 2026/7/12 20:26:23

Sora2 Pro 终于来了,国内开发者如何低成本、零门槛接入?

2026 年初&#xff0c;Sora2 Pro 的发布无疑是 AI 视频领域的“核弹级”消息。从文本直接生成电影级画质&#xff0c;支持物理模拟与多镜头控制&#xff0c;它不再只是工具&#xff0c;而是颠覆行业的“魔法”。 然而&#xff0c;对于国内开发者而言&#xff0c;想要使用官方 …

作者头像 李华
网站建设 2026/7/7 20:31:32

多项目并行?用云盒子企业网盘轻松搞定团队协作与信息同步!

在快节奏的企业环境中&#xff0c;多项目并行已成为常态。想象一下&#xff1a;一个客户经理同时跟进三个项目&#xff0c;项目管理过程中&#xff0c;如果信息不同步、资料散乱&#xff0c;团队效率将直线下降。而一些方案往往只需稍作修改&#xff0c;就能复用到其他项目上&a…

作者头像 李华
网站建设 2026/7/1 16:38:25

从零开始玩转金融LLM:12个数据集+8个模型+完整代码实战

温馨提示&#xff1a;若页面不能正常显示数学公式和代码&#xff0c;请阅读原文获得更好的阅读体验。 丁闪闪 (lianxhcn163.com) 曾咏新 厦门大学 (zengyongxinhpe163.com) 提要&#xff1a;本文系统整理了金融大语言模型 (LLM) 研究的核心资源&#xff0c;包括 12 个主流金融数…

作者头像 李华
网站建设 2026/7/14 17:53:01

NAS + 本地小参数模型:一套可落地的运行范式

如果你正在把这套思路落到真实项目里——比如合同审核、资料归档、结算核对、知识库建设——可以考虑用 RollCode 低代码平台 快速搭建文件驱动的流程页面、结果展示与 CPC 引流结构&#xff0c;把“状态型系统”与“业务转化路径”一次性设计清楚&#xff0c;避免只停留在概念…

作者头像 李华
网站建设 2026/7/1 11:48:58

观察世界的坐标:股市

观察世界的坐标&#xff1a;股市 &#x1f4ca; 股市的几大核心板块&#x1f30d; 为什么说“认识股市就能了解世界”&#xff1f;&#x1f3c6; “股市的胜利也是自己认知的胜利”&#x1f48e; 总结&#x1f4da; 各层次核心要点详解**第一层&#xff1a;基础知识&#xff08…

作者头像 李华