【洛谷】P3368 【模板】树状数组 2 树状数组区间修改、单点查询

code[vs] P1082弱化版
#include   
using namespace std;  
  
long long tr[500005];  
int m,n,q,w,e,k,lst;  
  
inline int lowbit(int x){return x&-x;}  
  
void add(int q,int d)  
{  
    int x=q;  
    while (x<=n)  
    {  
        tr[x]+=d;   
        x+=lowbit(x);  
    }  
    return;  
}  
  
long long query(int q)  
{  
    long long ans=0,x=q;  
    while (x>0)  
    {  
        ans+=tr[x];  
        x-=lowbit(x);  
    }  
    return ans;  
}  
  
int main(void)  
{  
    scanf("%d",&n);  
    scanf("%d",&m); 
    for (register int i=1;i<=n;++i)  
    {  
        scanf("%d",&q);  
        add(i,q-lst);  
        lst=q;  
    }  
    for (register int i=1;i<=m;++i)  
    {  
        scanf("%d",&k);  
        if (k==1)  
        {  
            scanf("%d%d%d",&q,&w,&e);  
            add(q,e),add(w+1,-e);
        }  
        else  
        if (k==2)  
        {  
            scanf("%d",&q);  
            printf("%lld\n",query(q));  
        }  
    }  
    return 0;  
}  

你可能感兴趣的:(树状数组,裸题练手感,Luogu)