Cod sursa(job #1425401)

Utilizator atimofteTimofte Alexandra atimofte Data 27 aprilie 2015 13:47:34
Problema Datorii Scor 100
Compilator c Status done
Runda pregatire-lot-aib Marime 0.82 kb
#include <stdio.h>
#include <stdlib.h>
int aib[100001],n;
void upd(int pl,int i){
    while(i<=n){
        aib[i]+=pl;
        i+=i&(i-1)^i;
    }
}
int sum(int a){
    int s=0;
    while(a>0){
        s+=aib[a];
        a=a&(a-1);
    }
    return s;
}
int main()
{
    FILE*fin,*fout;
    int k,i,m,c,a,b,x;
    fin=fopen("datorii.in","r");
    fscanf(fin,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&x);
        upd(x,i);
    }
    fout=fopen("datorii.out","w");
    for(i=0;i<m;i++){
        fscanf(fin,"%d",&c);
        if(c==0){
            fscanf(fin,"%d%d",&a,&b);
            upd(-b,a);
        }
        if(c==1){
            fscanf(fin,"%d%d",&a,&b);
            fprintf(fout,"%d\n",sum(b)-sum(a-1));
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}