洛谷P4868 Preprefix sum

洛谷传送门

题目描述

前缀和(prefix sum)𝑆𝑖=\sum a_{i}

前前缀和(preprefix sum)则把 𝑆𝑖 作为原序列再进行前缀和。记再次求得前缀和第 𝑖 个是 𝑆𝑆𝑖。

给一个长度 𝑛 的序列 𝑎1,𝑎2,⋯ ,𝑎𝑛有两种操作:

  1. Modify i x:把 𝑎𝑖 改成 𝑥。
  2. Query i:查询 𝑆𝑆𝑖。

输入格式

第一行给出两个整数 𝑁,𝑀。分别表示序列长度和操作个数。
接下来一行有 𝑁 个数,即给定的序列 𝑎1,𝑎2,⋯ ,𝑎𝑛​。
接下来 𝑀 行,每行对应一个操作,格式见题目描述。

输出格式

对于每个询问操作,输出一行,表示所询问的 𝑆𝑆𝑖 的值。

输入输出样例

输入

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

输出 

35
32

说明/提示

1≤𝑁,𝑀≤1e5,且在任意时刻 0≤𝐴𝑖≤1e5。

题目解读

        由题意知,题目的意思就是求前缀和的前缀和,下面是一个酣畅淋漓的数学推理

数学推理

        举个例子:

         

//对于   1 2 3 4 5
//   a[]=1 2 3 4 5
//s[1]=1
//s[2]=1+2
//s[3]=1+2+3
//s[4]=1+2+3+4
//s[5]=1+2+3+4+5
//ss[5]=s[1]+s[2]+s[3]+s[4]+s[5]
//     =1*5++2*(5-1)+3*(5-2)+4*(5-3)+5*(5-4)

 

        依此类推,我们可以发现ss_{k}=\sum (k-i+1)a_{i}=k\sum a_{i}-\sum(i-1)a_{i}

方法

        我们用两个树状数组 c 与 c1,分别维护\sum a_{i}( k 为常数不管),\sum (i-1)a_{i}

Code

#include<bits/stdc++.h>
using namespace std;
const long long N=1e5+5;
long long n,m,a[N],c[N],c1[N],id[N],ni[N];
long long lowbit(long long x){return (-x)&x;}
void add(long long x,long long y){for(;x<=n+1;x+=lowbit(x))c[x]+=y;}//将 c[x] 加上 y
void add1(long long x,long long y){for(;x<=n+1;x+=lowbit(x))c1[x]+=y;}//将 c1[x] 加上 y
long long sum(long long x){//求 c 的前缀和long long ret=0;for(;x;x-=lowbit(x))ret+=c[x];return ret;
}
long long sum1(long long x){//求 c1 的前缀和long long ret=0;for(;x;x-=lowbit(x))ret+=c1[x];return ret;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];add(i,a[i]-0);add1(i,(i-1)*(a[i]-0));//分别向 c 和 c1 加入 a[i] 和 (i-1)*a[i]}string t;int x,y;for(int i=1;i<=m;i++){cin>>t;if(t=="Query"){cin>>x;cout<<x*sum(x)-sum1(x)<<'\n';//输出结果}else{cin>>x>>y;add(x,y-a[x]);add1(x,(x-1)*(y-a[x]));//修改a[x]=y;}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/66163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习中的凸函数和梯度下降法

一、凸函数 在机器学习中&#xff0c;凸函数 和 凸优化 是优化问题中的重要概念&#xff0c;许多机器学习算法的目标是优化一个凸函数。这些概念的核心思想围绕着优化问题的简化和求解效率。下面从简单直观的角度来解释。 1. 什么是凸函数&#xff1f; 数学定义 一个函数 f…

vue3使用vue-native-websocket-vue3通讯

vue3使用vue-native-websocket-vue3通讯 插件使用一、启用Vuex集成1.在mian.js中2.store/index.js文件中3.要websocket使用的页面 二、启用Piain集成1.在mian.js中2.根目录下创建store文件夹&#xff0c;分别创建PiniaType.ts&#xff0c;store.ts&#xff0c;useSocketStore.t…

Windows图形界面(GUI)-QT-C/C++ - Qt控件与布局系统详解

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 Qt布局系统(Layouts) 布局管理器基础 高级布局技巧 嵌套布局 设置间距和边距 常用控件详解 按钮类控件 QPushButton (标准按钮) QRadioButton (单选按钮) QCheckBox (复选框) …

深入理解 ECMAScript 2024 新特性:字符串 isWellFormed 方法

ECMAScript 2024 引入了一个新的字符串实例方法&#xff1a;String.prototype.isWellFormed。这一新增功能是为了帮助开发者更容易地验证字符串是否为有效的 Unicode 文本。本文将详细介绍这一方法的使用场景、实现原理及其在实际应用中的价值。 String.prototype.isWellFormed…

[Linux]Docker快速上手操作教程

前言 以下命令并不是docker的所有&#xff0c;仅涉及日常使用时最最常用的命令。 目的之一时给入门的朋友熟悉学习&#xff0c;其二时我自己偶尔使用时备忘。 一、概念 简单介绍下docker的相关概念&#xff1a; 镜像&#xff1a;Docker 镜像是一个轻量级、可执行的独立软件…

【算法学习笔记】32:筛法求解欧拉函数

上节学习的是求一个数 n n n的欧拉函数&#xff0c;因为用的试除法&#xff0c;所以时间复杂度是 O ( n ) O(\sqrt{n}) O(n ​)&#xff0c;如果要求 m m m个数的欧拉函数&#xff0c;那么就会花 O ( m n ) O(m \sqrt{n}) O(mn ​)的时间。如果是求连续一批数的欧拉函数&#x…

生产管理看板助力节能科技公司实现数据自动化管理

在节能科技公司的生产过程中&#xff0c;数据管理的自动化是提高生产效率和产品质量的关键。然而&#xff0c;许多公司在数据记录、展示、对比和存档方面仍面临诸多痛点&#xff0c;如产品检测数据无法自动记录、缺乏直观的产线状态展示、检测数据对比繁琐耗时&#xff0c;以及…

leetcode 115. 不同的子序列

题目&#xff1a;115. 不同的子序列 - 力扣&#xff08;LeetCode&#xff09; 动态规划问题&#xff0c;f[i][j]表示s的第i个元素匹配到t的第j个元素&#xff0c;有多少种结果 f[i][j] f[i - 1][j] (s[i] t[j] ? f[i - 1][j - 1] : 0) 答案就是 f[s.length() - 1][t.len…

【C++】B2112 石头剪子布

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述游戏规则&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;解题分析与实现 &#x1f4af;我的做法实现逻辑优点与不足 &#x1f4af…

内存快照:宕机后Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照&#xff1f;快照时数据能修改吗?可以每秒做一次快照吗&#xff1f;小结每课一问 更多redis相关知识 上节课&#xff0c;我们学习了 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持…

系统架构设计师考点—项目管理

一、备考指南 项目管理主要考查的是进度管理、软件配置管理、质量管理、风险管理等相关知识&#xff0c;近几年都没有考查过&#xff0c;但是有可能在案例分析中考查关键路径的技术问题&#xff0c;考生了解为主。 二、重点考点 1、项目的十大管理&#xff08;速记&#xff1…

iOS - Objective-C 底层实现中的哈希表

1. 关联对象存储&#xff08;AssociationsHashMap&#xff09; // 关联对象的哈希表实现 typedef DenseMap<const void *, ObjcAssociation> ObjectAssociationMap; typedef DenseMap<DisguisedPtr<objc_object>, ObjectAssociationMap> AssociationsHashMa…

两分钟解决 :![rejected] master -> master (fetch first) , 无法正常push到远端库

目录 分析问题的原因解决 分析问题的原因 在git push的时候莫名遇到这种情况 若你在git上修改了如README.md的文件。由于本地是没有README.md文件的&#xff0c;所以导致 远端仓库git和本地不同步。 将远端、本地进行合并就可以很好的解决这个问题 注意&#xff1a;直接git pu…

Ubuntu Server 24.04 配置静态IP

Ubuntu Server 24.04 配置静态IP 提示&#xff1a;基于Ubuntu Server 24.04进行配置 文章目录 Ubuntu Server 24.04 配置静态IP一、查看网卡信息二、修改网卡信息三、使网卡配置生效四、测试 一、查看网卡信息 使用命令 ip a lo 为本地回环地址 ens33 真实网卡地址 shanfengubu…

微服务之松耦合

参考&#xff1a;https://microservices.io/post/architecture/2023/03/28/microservice-architecture-essentials-loose-coupling.html There’s actually two different types of coupling: runtime coupling - influences availability design-time coupling - influences…

Django 和 Vue3 前后端分离开发笔记

Django 和 Vue3 前后端分离开发笔记 1. Django Ninja API Django Ninja 是一个用于使用 Django 和 Python 3.6 类型提示构建 API 的网络框架。它具有以下主要特点&#xff1a; 简单易懂&#xff1a;设计为易于使用和符合直觉&#xff0c;适合快速上手。快速执行&#xff1a;…

44_Lua迭代器

在Lua中,迭代器是一种用于遍历集合元素的重要工具。掌握迭代器的使用方法,对于提高Lua编程的效率和代码的可读性具有重要意义。 1.迭代器概述 1.1 迭代器介绍 迭代器是一种设计模式,它提供了一种访问集合元素的方法,而不需要暴露其底层结构。在Lua中,迭代器通常以一个函…

hot100_240. 搜索二维矩阵 II

hot100_240. 搜索二维矩阵 II 直接遍历列减行增 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,1…

一步到位Python Django部署,浅谈Python Django框架

Django是一个使用Python开发的Web应用程序框架&#xff0c;它遵循MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;旨在帮助开发人员更快、更轻松地构建和维护高质量的Web应用程序。Django提供了强大的基础设施和工具&#xff0c;以便于处理复杂的业务逻…

Apache PAIMON 学习

参考&#xff1a;Apache PAIMON&#xff1a;实时数据湖技术框架及其实践 数据湖不仅仅是一个存储不同类数据的技术手段&#xff0c;更是提高数据分析效率、支持数据驱动决策、加速AI发展的基础设施。 新一代实时数据湖技术&#xff0c;Apache PAIMON兼容Apache Flink、Spark等…