ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P4868 Preprefix sum

2021-01-02 12:34:24  阅读:306  来源: 互联网

标签:P4868 单点 前缀 text sum times Preprefix 查询


\(\text{Description}\)

传送门

\(\text{Solution}\)

先看看一个简单的问题:

给定序列 \(a\),有单点修改,查询 \(s_i\)(\(s_i\) 是前缀和)。

这个问题应该有两种解决方法:

  1. 单点修改,再 \([1,i]\) 区间查询。
  2. 考虑每个点修改对前缀和的贡献,显然只会对 \([i,n]\) 有 \(val_{now}-val_{past}\) 的影响,这是区间修改。最后单点查询。

本质就是维护单点和维护前缀和。注意第一种方法只能查询一次前缀和,而第二种方法可以查询一段区间的前缀和。

尝试优化我们的查询方式。

发现有(即每一种元素往后的贡献):

\[SS_i=\sum_{j=1}^i(i-j+1)\times a_j \]

由于 \(i\) 是查询,\(j\) 是插入,\(i,j\) 是不相关的,我们得分开维护。

就有:

\[SS_i=i\times \sum_{j=1}^i a_j-\sum_{j=1}^i (j-1)\times a_j \]

分别维护 \(a_j\) 序列与 \((j-1)\times a_j\) 序列即可。

我们需要查询 \([1,i]\) 的前缀和,所以用法二维护即可(就是把最后的查询变成区间查询)。

\(\text{Code}\)

咕咕咕...

标签:P4868,单点,前缀,text,sum,times,Preprefix,查询
来源: https://www.cnblogs.com/AWhiteWall/p/14222498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有