Cod sursa(job #1826931)

Utilizator horatiucheval2Horatiu Andrei Cheval horatiucheval2 Data 11 decembrie 2016 09:24:55
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;

const int MAX = 15000;

int terminalZeros(int x){
    return x ^ (x - 1) & x;
}

void updateAIB(int aib[], int dim, int pos, int val){
    for(int i = pos; i <= dim; i += terminalZeros(i)){
        aib[i] += val;
    }
}

int queryAIB(int aib[], int x){
    int result = 0;
    for(int i = x; i > 0; i -= terminalZeros(i)){
        result += aib[i];
    }
    return result;
}

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

    int n, m;
    int aib[MAX];
    fin >> n >> m;

    for(int i = 1; i <= n; i++){
        int x;
        fin >> x;
        updateAIB(aib, n, i, x);
    }

    for(int i = 1; i <= m; i++){
        int op, a, b;
        fin >> op >> a >> b;
        if(op == 0){
            updateAIB(aib, n, a, -b);
        }else if(op == 1){
            fout << queryAIB(aib, b) - queryAIB(aib, a - 1) << "\n";
        }
    }

    fin.close();
    fout.close();
    return 0;
}