显然是不能直接开两个树状数组维护 前缀和,前缀和的前缀和。因为一旦对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(树状数组)相关推荐

  1. 10.20 Bzoj 3155 Preprefix sum(树状数组)

    Bzoj 3155 Preprefix sum 题意: 长度为n的序列,m次操作 操作有两种:1.询问前缀和的前缀和:2.修改某个ai的值 解题思路: S1=a1S_1=a_1S1​=a1​ S2=a ...

  2. bzoj 3155 Preprefix sum

    3155: Preprefix sum Time Limit: 1 Sec Memory Limit: 512 MB Submit: 1208 Solved: 553 [Submit][Status] ...

  3. BZOJ 3529 数表(莫比乌斯+树状数组)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...

  4. Codeforces Round #782 (Div. 2)-D. Reverse Sort Sum(树状数组)

    题目链接:Problem - D - Codeforces 题意:给定一个 01 序列 ,对  区间分别进行递增排序,得到  个序列,现给定  序列, ,即所有序列第  位的和.求给定 序列所对应的原 ...

  5. BZOJ.4888.[TJOI2017]异或和(树状数组)

    BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. ...

  6. BZOJ 2434 NOI2011阿狸的打字机 AC自动机+树状数组

    如果你还没学AC自动机,请看这篇博客 Problem bzoj通道 洛谷通道 Solution 简单的说来,其实就是要快速求一个字符串在另一个字符串中出现了多少次.考虑构造AC自动机. 首先可以想到很 ...

  7. BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2141 是 hydro 的 BZOJ ...

  8. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2545  Solved: 1419 [Submit][S ...

  9. LeetCode Range Sum Query - Mutable(树状数组、线段树)

    问题:给出一个整数数组,求出数组从索引i到j范围内元素的总和.update(i,val)将下标i的数值更新为val 思路:第一种方式是直接根据定义,计算总和时直接计算从i到j的和 第二种方式是使用树状 ...

最新文章

  1. Oracle开发:normal ,sysdba,sysoper区别
  2. 浅谈CSRF攻击方式
  3. php可以做ios程序吗,php写的可以在本机发送iOS push程序
  4. linux小窍门──设置时钟和时间
  5. 贫穷中透着零基础的单人制作游戏手册之二:做游戏不光靠创意
  6. C/C++中的##用法
  7. Linux获取线程id的方法学习
  8. 判断101-200之间有多少个素数,并输出所有素数。
  9. Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )
  10. 注意满足循环终止条件时counter是否仍在+1(记洛谷P1035WA的经历,Java语言描述)
  11. 剑指Offer——链表中环的入口结点
  12. 15. GD32F103C8T6入门教程-adc单通道轮训采集
  13. 删除Ubuntu旧内核的几种方法,这下grub菜单看起来清爽多了!
  14. if分支语句(JS)
  15. python报错Nonetype object is not iterable
  16. 【软硬链接总结】描述linux下软链接和硬链接的区别(面试题)
  17. oracle财务管理系统有什么用,CSS_Oracle财务管理系统:会计业务周期,下面是使用Oracle财务管理系统 - phpStudy...
  18. U盘容量变小后修复的方法
  19. 解析人工智能时代蕴含的人文主义精神
  20. 拒绝忽悠——Python帮你来网购

热门文章

  1. 英语语言c2,剑桥英语等级考试剑桥通用英语五级(C2 Proficiency)的水平如何?...
  2. 07年剑桥商务英语考试时间收费确定
  3. 2022 iapp 简洁工具箱方盒源码
  4. 强烈推荐款下载不限速解析神器
  5. 【web素材】07—仿京东,小米,锤子,华为等20+套商城网站模板
  6. 记使用HTML5 + JS 构建水果忍者游戏
  7. 电子书籍下載點 E-Book
  8. 翻译D26(附AC码 POJ 24:Divisor and Multiple)
  9. Android-蓝牙开发:解决搜索不到蓝牙设备
  10. python新手多多包涵