Cod sursa(job #1688664)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 13 aprilie 2016 17:39:39
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("datorii.in");
ofstream out("datorii.out");
const int NMAX = 15005;

int AIB[NMAX],N,M;

int zeros(int x)
{

    int rez = 0;
    for(int i = 0 ; i < 32 ; ++i)
        if(x & (1 << i))
            break;
        else
            ++rez;
    return 1<<rez;
}


void update(int x,int val)
{

    for(int i = x  ; i <= N ; i += zeros(i))
        AIB[i] += val;
}

int query(int poz)
{

    int sum = 0;
    for(int i = poz ; i > 0 ; i -= zeros(i))
        sum += AIB[i];
    return sum;
}

int main()
{

    in>>N>>M;
    int a,cod,b;
    for(int i = 1 ; i <= N ; ++i){

        in>>a;
        update(i,a);
    }
    for(int i = 1 ; i <= M ; ++i){

        in>>cod>>a>>b;
        if(cod == 0){
            update(a,-b);
        }
        else out<<query(b) - query(a-1)<<"\n";
    }
    in.close();
    out.close();
    return 0;
}