Cod sursa(job #2441386)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 20 iulie 2019 13:37:49
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>

int n, m;
int fenwick_tree[15000 + 1];

inline int next_index(int index){return index + (index&-index);}

inline int previous_index(int index){return index - (index&-index);}


int query(int index){
    int sum = 0;

    do{
        sum += fenwick_tree[index];

    }while((index = previous_index(index)));

    return sum;
}

void update(int index, int value){
    do{
        fenwick_tree[index] -= value;
    } while((index = next_index(index))<=n);

    return;
}

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

   fin>>n>>m;

   for(int i=1; i<=n; i++){
        int x;
        fin>>x;

        fenwick_tree[i] += x;

        if(next_index(i)<=n)
            fenwick_tree[next_index(i)] += fenwick_tree[i];
   }

   for(int i=1; i<=m; i++){
        int c, x, y;
        fin>>c>>x>>y;

        if(c) fout<<query(y) - query(x-1)<<std::endl;
        else update(x, y);
   }

}