Cod sursa(job #770536)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 23 iulie 2012 13:08:44
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>

using namespace std;

const int N = 15005;

int aib[N];
int n, m, x, y, k;

int lsb(int x)
{
    return ((x & (x - 1)) ^ x);
}

void update(int poz, int val)
{
    for (int i = poz; i <= n; i += lsb(i))
        aib[i] -= val;
}

int query(int poz)
{
    int rez = 0;

    for (int i = poz; i >= 1; i -= lsb(i))
        rez += aib[i];

    return rez;
}

int main()
{
    freopen ("datorii.in", "r", stdin);
    freopen ("datorii.out", "w", stdout);

    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &x);
        update(i, -x);
    }

    for (int i = 1; i <= m; ++i) {
        scanf("%d %d %d", &k, &x, &y);
        if (k == 0)
            update(x, y);
        else
            printf("%d\n", query(y) - query(x - 1));
    }

    return 0;
}