Cod sursa(job #990893)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 29 august 2013 11:00:05
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
//#include <fstream>
int aib[15001];

int main(){
    //std::ifstream fin("datorii.in");
    //std::ofstream fout("datorii.out");
    std::FILE *fin=std::fopen("datorii.in","r");
    std::FILE *fout=std::fopen("datorii.out","w");

    int N,M;
    //fin>>N>>M;
    std::fscanf(fin,"%i %i",&N,&M);


    int temp1,temp2,i,sum;

    for(i=1;i<=N;++i){
        //fin>>temp2;
        std::fscanf(fin,"%d",&temp2);
        temp1=i;
        while(temp1<=N){
            aib[temp1]+=temp2;
            temp1 += temp1&(-temp1);
        }
    }

    while(M--){
        //fin>>i>>temp1>>temp2;
        std::fscanf(fin,"%d %d %d",&i,&temp1,&temp2);
        if(i==0){
            while(temp1<=N){
                aib[temp1]-=temp2;
                temp1 += temp1&(-temp1);
            }
        }
        else{
            sum=0; temp1--;
            while(temp1!=temp2)
                if(temp2>temp1){
                    sum+=aib[temp2];
                    temp2&=temp2-1;
                }
                else{
                    sum-=aib[temp1];
                    temp1-=temp1&(-temp1);
                }
            //fout<<sum<<'\n';
            std::fprintf(fout,"%d\n",sum);
        }
    }

    std::fclose(fout);
    std::fclose(fin);
}