树状数组

树状数组的使用原理:
           功能:快速地求区间和,对区间进行在线操作。
           1.z[x]表示存储的是x到1的区间和
           2.lowbit实现了快速地在n之内所有包括了y的区间(其实就是所有区间)加上y,从位置x开始加

cogs : 数列操作

#include <bits/stdc++.h>
using namespace std;
#define lb(x) x&(-x)
const int maxn=1e5+10;
char a[maxn];
int z[maxn],n,m;;
inline int read(){
    int num=0,f=1; char c=getchar();
    while(!isdigit(c)){if(c=='-') f=-1; c=getchar();}
    while(isdigit(c)){num=(num<<1)+(num<<3)+(c^48); c=getchar();}
    return num*f;
}
inline void insert(int x,int y){
    for(;x<=n;x+=lb(x)) z[x]+=y; 
}
inline int query(int x){
    int ans=0;
    for(;x;x-=lb(x)) ans+=z[x];
    return ans;
}
int main(){
    n=read();
    for(int i=1;i<=n;i++){
        int x; x=read(); insert(i,x);
    }
    m=read();
    for(int i=1;i<=m;i++){
        int l,r; cin>>a; l=read(); r=read();
        if(a[0]=='S') insert(l,r);
        else 
        cout<<query(r)-query(l-1)<<'\n';
    }
}

 

posted @ 2017-09-29 15:25  TimDucan  阅读(115)  评论(0编辑  收藏  举报