Cod sursa(job #604436)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 22 iulie 2011 13:18:03
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

#define max_n 15001

using namespace std;

int v[max_n];
int i,n,m,x,c,a,b,s;

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

int bitul(int x) {
    return ((-x)&x);
}

void adauga(int x,int p) {
     while (p<=n) {
          v[p]+=x;
          p+=bitul(p);
    }
}

void scade(int x,int p) {
     while (p<=n) {
          v[p]-=x;
          p+=bitul(p);
    }
}

int suma(int a) {
    int r=0;
    while (a>0) {
        r+=v[a];
        a-=bitul(a);
    }
    return r;
}

int main () {
    in >> n >> m;
    for (i=1; i<=n; i++) {
        in >>x;
        adauga(x,i);
    }
    for (i=1; i<=m; i++) {
        in >> c >> a >> b;
        if (c==0)
        scade(b,a);
        else {
            s=suma(b)-suma(a-1);
            out << s << '\n';
        }
    }
    return 0;
}