Cod sursa(job #1696343)

Utilizator vnedelcuVictor Andrei Nedelcu vnedelcu Data 28 aprilie 2016 22:14:08
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>

#define nrzero(x) ((x^(x-1))&x)
const int nmax=15001;
const int mmax=100001;
int n;
int aib[nmax];

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

int compute(int poz)
{
    int rez,i;

    rez=0;
    i=poz;
    while (i)
    {
        rez+=aib[i];
        i-=nrzero(i);
    }
    return rez;
}

int main()
{
    FILE *f,*fout;
    int m,i,x,y,z;

    f=fopen("datorii.in","r");
    fout=fopen("datorii.out","w");
    fscanf(f,"%d%d",&n,&m);
    for (i=1; i<=n; i++)
    {
        fscanf(f,"%d",&x);
        update(i,x);
    }
    for (i=1; i<=m; i++)
    {
        fscanf(f,"%d%d%d",&x,&y,&z);
        if (!x)
            update(y,-z);
        else
            fprintf(fout,"%d\n",compute(z)-compute(y-1));
    }
    fclose(f);
    fclose(fout);
}