Cod sursa(job #1734916)

Utilizator VasilescuVasilescu Eliza Vasilescu Data 28 iulie 2016 15:23:40
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>

int n,c[15001];

void mod(int a,int b){
    while (a<=n){
        c[a]+=b;
        a+=(a&(a-1))^a;
    }
}

int sum(int a,int b){
    int s=0;
    while (b>0){
        s+=c[b];
        b-=(b&(b-1))^b;
    }
    while (a>0){
        s-=c[a];
        a-=(a&(a-1))^a;
    }
    return s;
}

int main(){
    FILE *fin, *fout;
    int i,a,b,d,m;
    fin=fopen("datorii.in","r");
    fout=fopen("datorii.out","w");
    fscanf(fin,"%d%d",&n, &m);

    for (i=1;i<=n;i++){
        fscanf(fin,"%d",&a);
        mod(i,a);
    }
    for (i=1;i<=m;i++){
        fscanf(fin,"%d %d %d",&d,&a,&b);
        if (d==0)
            mod(a,-b);
        else
            fprintf(fout,"%d\n",sum(a-1,b));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}