Cod sursa(job #990869)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 29 august 2013 08:43:49
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <vector>
using std::vector;

void increase(vector<short> &aib, unsigned idx, short val){
    unsigned bitmask=1,temp=aib.size()-1;
    while(temp>>=1) bitmask<<=1;

    while(idx<aib.size()){
        aib[idx]+=val;
        idx += idx&(-idx); //add the last significant digit to the number
    }
}
unsigned calc(const vector<short> &aib, unsigned idx){
    unsigned Sum=0;
    while(idx>0){
        Sum+=aib[idx];
        idx -= idx&(-idx); //unset the last significant bit
    }
    return Sum;
}

int main(){
    std::ifstream fin("datorii.in");
    std::ofstream fout("datorii.out");

    unsigned  n,m;
    fin>>n>>m;

    vector<short> aib(n+1,0);

    for(unsigned i=1;i<=n;++i){
        short x; fin>>x;
        increase(aib,i,x);
    }

    unsigned temp1,temp2;
    short val;
    char c;
    while(m--){
        fin>>c>>temp1;
        if(c=='0'){ fin>>val; increase(aib,temp1,-val); }
        else{ fin>>temp2; fout<<calc(aib,temp2)-calc(aib,temp1-1)<<'\n'; }
    }
}