Cod sursa(job #1042294)

Utilizator blexxSeulean Erik-Cristian blexx Data 26 noiembrie 2013 20:47:45
Problema Datorii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>

FILE *f,*g;
int n,m,c[15000],i,tip,poz,val,indice,nr;

int calcSum(int j)
{
    int sum = 0;
    sum += c[j];
    while(j>=1)
    {
        j = j - (j & (-j));
        sum += c[j];
    }
    return sum;
}

int main()
{
    f = fopen("datorii.in","r");
    g = fopen("datorii.out","w");

    fscanf(f,"%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"%d",&nr);
        indice = i;
        while(indice <= n)
            {
                c[indice] += nr;
                indice += indice & (-indice);
            }
    }
    for(i=1;i<=n;i++)
        printf("%d ",c[i]);
    printf("\n");
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d %d %d",&tip,&poz,&val);
        if(tip == 0)
            {
                while(poz <= n)
                {
                    c[poz] -= val;
                    poz += poz & (-poz);
                }
            }
         else if(tip == 1)
            {
                fprintf(g,"%d\n",calcSum(val) - calcSum(poz-1));
            }
    };
    return 0;
}