news 2026/4/18 9:34: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/4/18 3:58:37

DevOps实战系列 - 集成Arbess+阿里云OSS,下载Aliyun OSS制品进行自动化部署

Arbess 是一款开源免费的 CI/CD 工具&#xff0c;支持免费私有化部署&#xff0c;一键安装零配置。本文将详细介绍如何安装配置使用Arbess系统&#xff0c;使用Arbess流水线下载Aliyun OSS制品进行主机部署。 1、阿里云OSS 阿里云OSS是是阿里云提供的海量、安全、低成本、高可…

作者头像 李华
网站建设 2026/4/18 4:00:15

从跨界参与到场景落地:低空训推平台让大模型由通用走向专用

随着大模型技术向各行业渗透&#xff0c;用户对大模型期待已经从重技术向着技术与场景并重的方向转化&#xff0c;形成了对高效、低成本模型定制路径的需求。面向物流、巡检、文旅等行业向低空经济领域广泛布局的背景&#xff0c;星图云开放平台推出低空训推平台&#xff0c;通…

作者头像 李华
网站建设 2026/4/17 13:30:48

跨域跨境电商新周期:成本上行只是表象,真正的分水岭是“系统能力”

过去做跨境&#xff0c;很多团队靠一套打法就能吃遍多个市场&#xff1a;低价小包直发、平台流量放量、再用价格把转化砸出来。现在这套“通吃模型”越来越难。原因很现实&#xff1a;到岸成本变得不稳定、合规责任变得可追溯、投放个性化在收缩、内容电商在欧洲加速渗透。跨域…

作者头像 李华
网站建设 2026/4/18 3:58:01

大数据领域数据预处理的实时数据挖掘技术

大数据领域数据预处理的实时数据挖掘技术 关键词:大数据、数据预处理、实时数据挖掘、数据清洗、特征工程、流处理、机器学习 摘要:本文深入探讨大数据领域中数据预处理在实时数据挖掘中的关键作用。我们将从基础概念出发,逐步解析实时数据挖掘的技术架构,详细介绍数据预处…

作者头像 李华
网站建设 2026/4/18 4:00:01

AI时代的能力通行证:全面解读CAIE注册人工智能工程师认证

在人工智能技术飞速发展的今天,无论是零基础的学习者、寻求职业转型的职场人,还是深耕技术领域的专业人士,都在寻找一条既能系统学习又能获得行业认可的专业路径。CAIE注册人工智能工程师认证(简称“赛一认证”)作为近年来备受关注的AI领域专业认证,为不同背景和需求的人…

作者头像 李华
网站建设 2026/4/18 4:00:04

假照放、单照接,阿里国际站帮外贸商家实现“春节躺赚”

“老外为什么过年不放假&#xff1f;&#xff01;”“大过年的&#xff0c;来了订单还接不接&#xff1f;&#xff01;” 过去&#xff0c;这一直是一个让外贸商家“左右为难”的问题。但今年春节&#xff0c;单子可以照常接&#xff0c;发货交给阿里国际站。由此&#xff0c;…

作者头像 李华