Cod sursa(job #2306417)

Utilizator skoda888Alexandru Robert skoda888 Data 22 decembrie 2018 12:10:30
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb

#include <iostream>
#include <fstream>

#define MAX_N 15005

long long int AIB[MAX_N];
int N, M;

int less_significant_bit(int num){
    return num & -num;
}

void Add(int index, int value){
    for(; index <= N; index += less_significant_bit(index)){
        AIB[index] += value;
    }
}

int Sum(int index){
    int s = 0;
    for(; index > 0; index -= less_significant_bit(index)){
        s += AIB[index];
    }
    return s;
}

int main(){

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

    in >> N >> M;

    for(int i = 1; i <= N; ++i){
        int val;
        in >> val;
        Add(i, val);
    }

    for(int i = 1; i <= M; ++i){
        int op;
        in >> op;
        if(op == 0){
            int T, V;
            in >> T >> V;
            Add(T, -V);
        }
        else{
            int P, Q;
            in >> P >> Q;
            out << Sum(Q) - Sum(P - 1) << '\n';
        }
    }
    return 0;
}