【BZOJ 3155】Preprefix sum(树状数组)
显然是不能直接开两个树状数组维护 前缀和,前缀和的前缀和。因为一旦对a[i]进行修改,将会影响许多位前缀和的前缀和
我们考虑对式子变一下形
Qi =S1+S2+S3+...+Si
=a1+a1+a2+a1+a2+a3+...+ai=a1*i+a2*(i-1)+a3*(i-2)+...+ai*=(a1+a2+a3+...+ai)*i - (a2+a3^2+a4^3+...+ai^(i-1))
因此还是开两个树状数组 一个维护前半部分 一个维护后半部分
#include<bits/stdc++.h>
#define N 100005
using namespace std;
typedef long long ll;
struct BIT
{ll tree[N];int n;inline int lowbit(int x){return x&(-x);}inline void update(int x,ll del){for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=del;}inline ll query(int x){ll ans=0;for(int i=x;i;i-=lowbit(i)) ans+=tree[i];return ans;}
}tree1,tree2;
template<class T>
inline void read(T &x)
{x=0;static char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
}
int n,m;
ll a[N];
int main()
{read(n); read(m);tree1.n=n; tree2.n=n;for(int i=1;i<=n;i++){read(a[i]);tree1.update(i,a[i]);tree2.update(i,a[i]*(i-1));}char s[10];for(int i=1;i<=m;i++){scanf("%s",&s);ll x,y;if(s[0]=='Q'){read(x);cout<<ll(tree1.query(x)*x)-tree2.query(x)<<'\n';}else{read(x); read(y);tree1.update(x,y-a[x]); tree2.update(x,(y-a[x])*(x-1));a[x]=y;}}return 0;
}
转载于:https://www.cnblogs.com/Patrickpwq/articles/9850403.html
【BZOJ 3155】Preprefix sum(树状数组)相关推荐
- 10.20 Bzoj 3155 Preprefix sum(树状数组)
Bzoj 3155 Preprefix sum 题意: 长度为n的序列,m次操作 操作有两种:1.询问前缀和的前缀和:2.修改某个ai的值 解题思路: S1=a1S_1=a_1S1=a1 S2=a ...
- bzoj 3155 Preprefix sum
3155: Preprefix sum Time Limit: 1 Sec Memory Limit: 512 MB Submit: 1208 Solved: 553 [Submit][Status] ...
- BZOJ 3529 数表(莫比乌斯+树状数组)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...
- Codeforces Round #782 (Div. 2)-D. Reverse Sort Sum(树状数组)
题目链接:Problem - D - Codeforces 题意:给定一个 01 序列 ,对 区间分别进行递增排序,得到 个序列,现给定 序列, ,即所有序列第 位的和.求给定 序列所对应的原 ...
- BZOJ.4888.[TJOI2017]异或和(树状数组)
BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...
- BZOJ 2434 NOI2011阿狸的打字机 AC自动机+树状数组
如果你还没学AC自动机,请看这篇博客 Problem bzoj通道 洛谷通道 Solution 简单的说来,其实就是要快速求一个字符串在另一个字符串中出现了多少次.考虑构造AC自动机. 首先可以想到很 ...
- BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2141 是 hydro 的 BZOJ ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2545 Solved: 1419 [Submit][S ...
- LeetCode Range Sum Query - Mutable(树状数组、线段树)
问题:给出一个整数数组,求出数组从索引i到j范围内元素的总和.update(i,val)将下标i的数值更新为val 思路:第一种方式是直接根据定义,计算总和时直接计算从i到j的和 第二种方式是使用树状 ...
最新文章
- Oracle开发:normal ,sysdba,sysoper区别
- 浅谈CSRF攻击方式
- php可以做ios程序吗,php写的可以在本机发送iOS push程序
- linux小窍门──设置时钟和时间
- 贫穷中透着零基础的单人制作游戏手册之二:做游戏不光靠创意
- C/C++中的##用法
- Linux获取线程id的方法学习
- 判断101-200之间有多少个素数,并输出所有素数。
- Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )
- 注意满足循环终止条件时counter是否仍在+1(记洛谷P1035WA的经历,Java语言描述)
- 剑指Offer——链表中环的入口结点
- 15. GD32F103C8T6入门教程-adc单通道轮训采集
- 删除Ubuntu旧内核的几种方法,这下grub菜单看起来清爽多了!
- if分支语句(JS)
- python报错Nonetype object is not iterable
- 【软硬链接总结】描述linux下软链接和硬链接的区别(面试题)
- oracle财务管理系统有什么用,CSS_Oracle财务管理系统:会计业务周期,下面是使用Oracle财务管理系统 - phpStudy...
- U盘容量变小后修复的方法
- 解析人工智能时代蕴含的人文主义精神
- 拒绝忽悠——Python帮你来网购