支持单点修改

#include <cstdio>

using namespace std;

int n, m;
int a[500001], c[500001];

int lowbit(int x)
{
    return x & -x;
}

int sum(int x)
{
    int ans = 0;
    while(x)
    {
        ans += c[x];
        x -= lowbit(x);
    }
    return ans;
}

void add(int x, int d)
{
    while(x <= n)
    {
        c[x] += d;
        x += lowbit(x);
    }
}

int main()
{
    int i, j, x, y, z;
    scanf("%d %d", &n, &m);
    for(i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
        add(i, a[i]);
    }
    for(i = 1; i <= m; i++)
    {
        scanf("%d %d %d", &z, &x, &y);
        if(z == 1) add(x, y);
        else printf("%d\n", sum(y) - sum(x - 1));
    }
    return 0;
}
View Code

相关文章: