Cod sursa(job #235579)

Utilizator johnny2008Diaconu Ion johnny2008 Data 24 decembrie 2008 15:29:02
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>   
FILE *f;   
FILE *g;
int n,m,a[15005],val;   
int nrb(int x)   
{   
    return (x&(x-1))^x;   
}   
void adauga(int x)   
{   
    a[x]-=val;   
    while((x+=nrb(x))<=n)   
        a[x]-=val;   
}   
void adauga1(int x)   
{   
    a[x]+=val;   
    while((x+=nrb(x))<=n)   
        a[x]+=val;   
}   
int suma(int x)   
{   
    int s=a[x];   
    while((x-=nrb(x)))   
        s+=a[x];   
    return s;   
}   
int main()   
{   
    f=fopen("datorii.in","r");   
    g=fopen("datorii.out","w");    
    int c,x,y;   
    fscanf(f,"%d %d",&n,&m);   
    for(int i=1; i<=n; i++)   
    {   
        fscanf(f,"%d",&val);   
        adauga1(i);   
    }   
    for(; m; m--)   
    {   
        fscanf(f,"%d %d %d",&c,&x,&y);   
        if(!c)   
        {   
            val=y;   
            adauga(x);   
        }   
        else  
            fprintf(g,"%d\n",suma(y)-suma(x-1));   
    }  
	
    fclose(g);   
    fclose(f);      
}