Cod sursa(job #641717)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 29 noiembrie 2011 11:34:05
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>
using namespace std;

ifstream in("datorii.in");
ofstream out("datorii.out");

int n,m,aib[15010];

inline int zeros(const int &nr) {
    return nr&(-nr);
}

inline void add(int poz, int nr) {

    while(poz<=n) {

        aib[poz]+=nr;

        poz+=zeros(poz);
    }
}

inline int sum(int poz) {
    int sum=0;

    while(poz) {

        sum+=aib[poz];

        poz-=zeros(poz);
    }
    return sum;
}

int main() {
    int i,nr,poz1,poz2,poz,op;

    in >> n >> m;

    for(i=1;i<=n;++i) {
        in >> nr;

        add(i,nr);
    }

    for(i=1;i<=m;++i) {

        in >> op;

        if(op==1) {
            in >> poz1 >> poz2;

            out << sum(poz2) - sum(poz1-1) << "\n";
        }
        else {
            in >> poz >> nr;

            add(poz,-nr);
        }
    }

    return 0;
}