Cod sursa(job #113124)

Utilizator SharpeBigadrian ursulescu SharpeBig Data 8 decembrie 2007 20:41:42
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>

#define LSB(x) (((x) & (x - 1)) ^ (x))

int N, M, A[15001], S[150001], T[15001];

void update(int n, int v)
{
    for (; n <= N; n += LSB(n))
        T[n] += v;
}

int query(int l, int r)
{
    int n, res = 0;

    for (n = r; n > 0; n -= LSB(n))
        res += T[n];
    for (n = l - 1; n > 0; n -= LSB(n))
        res -= T[n];
    return res;
}

int main(void)
{
    FILE *fin, *fout;
    int i, j, k;

    fin = fopen("datorii.in", "r");
    fout = fopen("datorii.out", "w");

    fscanf(fin, "%d %d\n", &N, &M);
    for (i = 1; i <= N; i++)
        fscanf(fin, "%d", A + i),
        S[i] = S[i - 1] + A[i];
    for (; M; M--)
    {
        fscanf(fin, "%d %d %d", &k, &i, &j);
        if (!k)
           update(i, j);
        else
           fprintf(fout, "%d\n", S[j] - S[i - 1] - query(i, j));
    }

    fclose(fin), fclose(fout);
    
    return 0;
}