Cod sursa(job #69544)

Utilizator DastasIonescu Vlad Dastas Data 3 iulie 2007 15:07:45
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>

#define maxn 15001

FILE *in = fopen("datorii.in","r"), *out = fopen("datorii.out","w");

int n, m;

int b[maxn]; // AIB

int query(int x)
{
    int r = 0;

    while ( x )
        r += b[x], x -= x^(x-1)&x;

    return r;
}

void update(int x, int val)
{
    while ( x <= n )
        b[x] += val, x += x^(x-1)&x;
}

int main()
{
    fscanf(in, "%d %d", &n, &m);

    int a, c, d;
    for ( int i = 1; i <= n; ++i )
        fscanf(in, "%d", &a), update(i, a);

    for ( int i = 1; i <= m; ++i )
    {
        fscanf(in, "%d %d %d", &a, &c, &d);
        if ( a )
            fprintf(out, "%d\n", query(d) - query(c-1));
        else
            update(c^(c-1)&c, -d);
    }


	return 0;
}