Cod sursa(job #1425457)

Utilizator TincaMateiTinca Matei TincaMatei Data 27 aprilie 2015 15:32:03
Problema Datorii Scor 0
Compilator c Status done
Runda pregatire-lot-aib Marime 0.95 kb
#include <stdio.h>

int aib[100001];

int lastbit(int x){
    return x&(-x);
}

int capat(int x){
    return x-lastbit(x)+1;
}

int sum(int n){
    int s;
    s=0;
    while(n>0){
        s=s+aib[n];
        n=capat(n)-1;
    }
    return s;
}

void decrease(int pos,int val,int n){\
    int i;
    i=pos;
    while(i<=n){
        aib[i]=aib[i]-val;
        i=i+lastbit(i);
    }
}

void add(int pos,int val,int n){\
    int i;
    i=pos;
    while(i<=n){
        aib[i]=aib[i]+val;
        i=i+lastbit(i);
    }
}
int main(){
    int n,m,x,i,f,a,b;
    FILE *fin=fopen("datorii.in","r");
    FILE *fout=fopen("datorii.out","w");
    fscanf(fin,"%d%d",&n,&m);

    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&x);
        add(i,x,n);
    }

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