Cod sursa(job #1183204)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 8 mai 2014 17:09:21
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define MAXN 15000
int aib[MAXN+1], n;
inline int ub(int a){
    return a&(-a);
}
inline int sum(int a){
    int i, s;
    s=0;
    for(i=a; i!=0; i-=ub(i)){
        s+=aib[i];
    }
    return s;
}
inline void add(int poz, int val){
    int i;
    for(i=poz; i<=n; i+=ub(i)){
        aib[i]+=val;
    }
}
int main(){
    int m, a, i, b, c;
    FILE *fin, *fout;
    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);
        add(i, a);
    }
    for(i=0; i<m; i++){
        fscanf(fin, "%d%d%d", &a, &b, &c);
        if(a==0){
            add(b, -c);
        }else{
            fprintf(fout, "%d\n", sum(c)-sum(b-1));
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}