Cod sursa(job #468040)

Utilizator alex_dincaDinca Alexandru-Nicolae - UPB alex_dinca Data 1 iulie 2010 23:18:46
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>

int n, m;
int AIB[20006];

void update(int poz,int val)
{
    for(; poz <= n;poz += (poz ^ (poz - 1) & poz))
        AIB[poz] += val;
}

int query(int poz)
{
    int s = 0;
    for(; poz; poz -= (poz ^ (poz - 1) & poz))
        s += AIB[poz];
    return s;
}

int main ()
{
    int i, val, a, b, c;
    FILE *f = fopen("datorii.in", "r");
    FILE *g = fopen("datorii.out", "w");
    fscanf(f, "%d%d", &n, &m);
    for(i = 1;i <= n;i++)
    {
        fscanf(f, "%d", &val);
        update(i, val);
    }
    for(i = 1;i <= m;i++)
    {
        fscanf(f, "%d%d%d", &a, &b, &c);
        if( !a )
            update(b, -c);
        else
            fprintf(g, "%d %d %d\n", query(c), query(b-1), query(c) - query(b - 1));
    }
    fclose(g);
    return 0;
}