Cod sursa(job #1036398)

Utilizator dan.ghitaDan Ghita dan.ghita Data 19 noiembrie 2013 12:24:56
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int v[150000], n, x, m, a, b, t;
int zeros(int a){
return a&(a-1)^a;
}
void update(int poz, int x){
for(int i=poz; i<=n; i+=zeros(i)){
    v[i]+=x;
    }
//    cout<<"updated:\n";
//        for(int j=1; j<=n; ++j) cout<<v[j]<<' ';
//    cout<<'\n';
}
int query(int poz){
int sum=0;
for(int i=poz; i>0; i-=zeros(i)){
    sum+=v[i];
}
return sum;
}


int main()
{
f>>n>>m;
for(int i=1; i<=n; ++i){
    f>>x;
   update(i, x);
//    for(int j=1; j<=n; ++j) cout<<v[j]<<' ';
//    cout<<'\n';
}
while(m--){
    f>>t;
    if(t==0) f>>a>>b, update(a, -b);
    else if(t==1) f>>a>>b, g<<query(b)-query(a-1)<<'\n';

}

//    cout<<"updated:\n";
//        for(int j=1; j<=n; ++j) cout<<v[j]<<' ';
//    cout<<'\n';

    return 0;
}