Cod sursa(job #1426854)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 30 aprilie 2015 19:33:56
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>
#include <stdlib.h>
#define zeros(x) (((x-1)^x)&x)
#define MAXN 15001
int aib[MAXN],n;
inline void add(int x,int nr){
    int i;
    for(i=x;i<=n;i=i+zeros(i))
        aib[i]+=nr;
}
inline int sum(int x){
    int i,s=0;
    for(i=x;i>0;i=i-zeros(i))
        s=s+aib[i];
    return s;
}
int main(){
    FILE*fi,*fout;
    int i,m,t,a,b,nr;
    fi=fopen("datorii.in" ,"r");
    fout=fopen("datorii.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&m);
    for(i=1;i<=n;i++){
        fscanf(fi,"%d" ,&nr);
        add(i,nr);
    }
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d%d" ,&t,&a,&b);
        if(t==0)
            add(a,-b);
        else
            fprintf(fout,"%d\n" ,sum(b)-sum(a-1));
    }
    fclose(fi);
    fclose(fout);
    return 0;
}