【模板】树状数组

来源:互联网 发布:百度数据可视化 编辑:程序博客网 时间:2024/06/05 11:33

题目:1081 线段树练习2

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int MAXN = 100000 + 5;long long tree[MAXN];int m,n,t,y,z,a,b,w,ans = 0;int lowbit(int x){    return x&(-x);}void add(int x,int y){    while(x <= n)    {        tree[x] += y;        x += lowbit(x);    }    return;}int sum(int x){    int s = 0;    while(x)    {        s += tree[x];        x -= lowbit(x);    }    return s;}int answer(int x,int y){    return sum(y) - sum(x - 1);}int num[MAXN];int main(){    memset(tree,0,sizeof(tree));    scanf("%d",&n);    for(int i = 1; i <= n; i ++)    {        scanf("%d",&num[i]);        add(i,num[i] - num[i - 1]);    }    scanf("%d",&m);    for(int j = 1; j <= m; j ++)    {        scanf("%d",&t);        if(t == 1)        {            scanf("%d %d %d",&a,&b,&y);            add(a,y);            add(b + 1,-y);        }        else if(t == 2)        {            scanf("%d",&y);            printf("%d\n",sum(y));        }    }    return 0;}
0 0