Cod sursa(job #1776279)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 11 octombrie 2016 09:14:13
Problema Datorii Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia2-arborideintervale Marime 0.85 kb
#include <stdio.h>
#define lim 15001
int aib[lim],n;
void update(int poz,int val){
    while(poz<=n){
        aib[poz]+=val;
        poz=poz+((poz&(poz-1))^poz);
    }
}
int query(int poz){
    int s=0;
    while(poz>=1){
        s+=aib[poz];
        poz=poz-((poz&(poz-1))^poz);
    }
    return s;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("datorii.in","r");
    fout=fopen("datorii.out","w");
    int i,m,a,b,cer;
    fscanf(fin,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&a);
        update(i,a);
    }
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d%d",&cer,&a,&b);
        if(cer==1){
            cer=query(b)-query(a-1);
            fprintf(fout,"%d\n",cer);
        }
        else{
            b=b*(-1);
            update(a,b);
        }
    }
    fclose(fin);
    fclose(fout);
return 0;
}