树状数组
树状数组的使用原理: 功能:快速地求区间和,对区间进行在线操作。 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'; } }