【bzoj3155】【Preprefix sum】【树状数组】

原创 2015年11月21日 16:35:15

Description

Input

第一行给出两个整数N,M。分别表示序列长度和操作个数
接下来一行有N个数,即给定的序列a1,a2,....an
接下来M行,每行对应一个操作,格式见题目描述

Output

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

Sample Input

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

Sample Output

35
32

HINT

1<=N,M<=100000,且在任意时刻0<=Ai<=100000

题解:树状数组的区间修改。。。或许直接用线段树吧。。

代码:

#include<iostream>
#include<cstdio>
#define N 100010
using namespace std;
long long c[N],c2[N],a[N];
int n,q,v,x;
char ch[10];
long long read(){
    long long x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
void updata(long long c[],int x,long long v){for (int i=x;i<=n;i+=(i&(-i))) c[i]+=v;}
long long query(long long c[],int x){
  long long ans(0);
  for (int i=x;i;i-=(i&(-i))) ans+=c[i];
  return ans;
}
int main(){
  n=read();q=read();
  for (int i=1;i<=n;i++){
    a[i]=read();updata(c,i,a[i]);updata(c2,i,(n-i+1)*a[i]);
  } 
  for (int i=1;i<=q;i++){
     scanf("%s",&ch);
     if (ch[0]=='Q'){x=read();printf("%lld\n",query(c2,x)-(n-x)*query(c,x));}
     if (ch[0]=='M'){
       x=read();v=read();updata(c,x,v-a[x]);updata(c2,x,(n-x+1)*(v-a[x]));a[x]=v;
     }
  }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

bzoj 3155 Preprefix sum

树状数组差分和

【bzoj3155】Preprefix Sum

这题目名字挺有意思= =   SSt=∑ti=1ai∗i=∑ti=1ai∗(n−i+1)−(n−t)∑ti=1aiSS_{t}=\sum_{i=1}^{t}a_{i}*i=\sum_{i=1}^{t...

使用MPI并行求解前缀和(prefix sum)

使用MPI并行求解前缀和(pre fixsum) 1.背景     本文介绍的并行模式是前缀和(prefixsum),通常也叫扫描(scan)。从数学的角度看,闭扫描(inclusive scan)操...

【BZOJ3155】Preprefix sum

Description Input第一行给出两个整数N,M。分别表示序列长度和操作个数 接下来一行有N个数,即给定的序列a1,a2,….an 接下来M行,每行对应一个操作,格式见题目描述Ou...

BZOJ3155 Preprefix sum

一个数相当于给他后边的前缀和序列加了一个等差数列 直接线段树 #include #include #include #include #include #include #include #inclu...

bzoj3155 Preprefix sum(简单线段树)

3155: Preprefix sum Time Limit: 1 Sec  Memory Limit: 512 MB Submit: 1258  Solved: 573 [Submit][Statu...

【BZOJ】3155 Preprefix Sum

【解析】线段树,区间修改,区间求和 [Analysis]考虑每个数的更改对答案的影响 [Sumup] ①对于区间求和的标记,注意要+而不是直接更改 ②如果存在LL和int的运算,统一转成LL,注意...

3155: Preprefix sum

传说可以用树状数组,不过因为本人比较菜,于是上无脑差分数组+线段树。 容易发现,当一个数i增加x时,会使前缀和的前缀和j(j>=i)增加(j-i+1)*x。那么可以想象成i~n段加x,i+1~n段加...

(LeetCode 307) Range Sum Query - Mutable(树状数组讲解)

Q: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), incl...

【Codeforces Round 365 (Div 2)D】【离线询问 树状数组 前驱思想】Mishka and Interesting sum 区间内出现次数偶数的数的异或和

#include #include #include #include #include #include #include #include #include #include #include #...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)