[luogu4868]Preprefix sum
https://www.luogu.org/problemnew/show/P4868
题目大意
单点修改,查询前缀前缀和。
分析
遇到了单点修改,前缀和,很明显是要树状数组维护解决问题。
请看以下我的数列的转换
\[s1+s2+s3+ \cdots +sn\]
\[a1+a1+a2+a1+a2+a3+ \cdots +an\]
\[a1*n+a2*(n-1)+a3*(n-2)+...an*1\]
\[(a1+a2+a3+...+an) \times N - (a2+a3^2+a4^3+...+an^{n-1})\]
ac代码
#include <bits/stdc++.h>
#define ll long long
#define ms(a, b) memset(a, b, sizeof(a))
#define inf 0x3f3f3f3f
#define N 100005
using namespace std;
template <typename T>
inline void read(T &x) {
x = 0; T fl = 1;
char ch = 0;
while (ch < '0' || ch > '9') {
if (ch == '-') fl = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
x *= fl;
}
struct bittree {
#define lowbit(x) (x&(-x))
ll tr[N];
int n;
void add(int k, ll val) {
for (int i = k; i <= n; i += lowbit(i))
tr[i] += val;
}
ll query(int x) {
ll res = 0;
for (int i = x; i; i -= lowbit(i))
res += tr[i];
return res;
}
}tr1, tr2;
int n, m;
ll a[N];
int main() {
read(n); read(m);
tr1.n = tr2.n = n;
for (int i = 1; i <= n; i ++) {
read(a[i]);
tr1.add(i, a[i]);
tr2.add(i, a[i] * (i - 1));
}
while (m --) {
char opt[10];
scanf("%s", opt);
ll x, y;
if (opt[0] == 'Q') {
read(x);
printf("%lld\n", (ll)(tr1.query(x) * x) - 1ll * tr2.query(x));
}
else {
read(x); read(y);
tr1.add(x, y - a[x]);
tr2.add(x, (y - a[x]) * (x - 1));
a[x] = y;
}
}
return 0;
}
[luogu4868]Preprefix sum的更多相关文章
- [bzoj3155]Preprefix sum(树状数组)
3155: Preprefix sum Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 1183 Solved: 546[Submit][Status] ...
- BZOJ 3155: Preprefix sum( 线段树 )
刷刷水题... 前缀和的前缀和...显然树状数组可以写...然而我不会, 只能写线段树了 把改变成加, 然后线段树维护前缀和, 某点p加, 会影响前缀和pre(x)(p≤x≤n), 对[p, n]这段 ...
- Preprefix sum BZOJ 3155 树状数组
题目描述 前缀和(prefix sum)Si=∑k=1iaiS_i=\sum_{k=1}^i a_iSi=∑k=1iai. 前前缀和(preprefix sum) 则把SiS_iSi作为原序列 ...
- 3155: Preprefix sum
3155: Preprefix sum https://www.lydsy.com/JudgeOnline/problem.php?id=3155 分析: 区间修改,区间查询,线段树就好了. 然后,这 ...
- 差分+树状数组【p4868】Preprefix sum
Description 前缀和(prefix sum)\(S_i=\sum_{k=1}^i a_i\). 前前缀和(preprefix sum) 则把\(S_i\)作为原序列再进行前缀和.记再次求得前 ...
- 树状数组【bzoj3155】: Preprefix sum
3155: Preprefix sum 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3155 把给出的a_i当成查分数组d_i做就可以了 ...
- 2021.08.09 P4868 Preprefix sum(树状数组)
2021.08.09 P4868 Preprefix sum(树状数组) P4868 Preprefix sum - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 前缀和(pr ...
- BZOJ3155: Preprefix sum
题解: 写过树状数组搞区间修改和区间求和的就可以秒出吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath& ...
- BZOJ 3155: Preprefix sum
大意:给一个数组,先求出SUM[I],然后动态的求出1-I的SUM[I]的和, 这题得化公式: 树状数组维护两个和:SUM(A[I])(1<=I<=X); SUM(A[I]*(N-I+1) ...
随机推荐
- 一个可爱 & 小清新的加载等待Android控件
https://github.com/Carson-Ho/Kawaii_LoadingView
- Zookeeper-相关流程
选主流程: 当Zk进入恢复模式时,需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态.Zk的选举算法有两种:一种是基于basic paxos实现的,一种是基于fast pa ...
- .NET CORE下的Cache
.NET CORE 下的缓存跟之前ASP.NET下的缓存有所不同,应用.NET CORE缓存首先需要引入Microsoft.Extensions.Caching.Memory程序包 下面简单写了一个C ...
- [朴孝敏][Ooh La La]
歌词来源:http://music.163.com/#/song?id=484058960 作曲 : Damon Sharpe/Jimmy Burney/Adam Kapit [作曲 : Damon ...
- CF367C. Hard problem
链接[http://codeforces.com/group/1EzrFFyOc0/contest/706/problem/C] 题意: 他希望它们按词典顺序排序(就像字典中那样),但他不允许交换其中 ...
- VS2015安装及单元测试
今天跟大家分享一下我的VS2015的安装过程以及对单元测试的操作步骤.VS2015是一款非常好用的编程软件,内容很多很广泛,是深受欢迎的一款软件,较之于VC++6.0有着一些好处,对VC6.0++来说 ...
- 12.12 Daily Scrum
这周末我们会集成一下反馈活跃用户的模块. 另外,今天编译的第一次测试结束,周末这两天项目的进度会比之前加快一些. Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐 ...
- 对spring cloud config的一点理解
以下部分纯属个人理解,但是结果都是经过demo验证. 一.spring cloud config介绍 spring cloud是spring家族中的一个微服务工具包,其中包含了很多微服务的工具.偏向于 ...
- Linux内核分析——期中总结
期中总结 一.MOOC课程 (一)计算机是如何工作的 1.冯诺依曼体系结构的核心思想是存储程序计算机. 2.CPU在实际取指令时根据cs:eip来准确定位一个指令. 3.寄存器模式,以%开头的寄存器标 ...
- Linux内核分析——进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 (一)进程调度与进程调度的时机分析 1.不同类型的进程有不同的调度需求 第一种分类: (1)I/O-bound:频繁进行I ...