Cod sursa(job #2529606)

Utilizator tudorcioc5Cioc Tudor tudorcioc5 Data 23 ianuarie 2020 18:11:37
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;
ifstream fin;
ofstream fout;

vector <int> BIT(15001 , 0);
int i, j, n, m;


inline int least_significant_bit(int a){

    return ((a ^ (a-1)) & a );
}

inline void update(int pos, int val){

    for (int ind=pos; ind<=n; ind += least_significant_bit(ind))
        BIT[ind] += val;

}

inline int get_sum(int pos){
    int sum = 0;

    for (int ind=pos; ind>=1 ; ind -= least_significant_bit(ind))
        sum += BIT[ind];

    return sum;
}


int main (void){
    int aux, aux2, type;
    fin.open("datorii.in");
    fin>>n>>m;
    for (i=1; i<=n; i++){
        fin>>aux;

        update(i , aux);
    }

    fout.open("datorii.out");

    for (i=1; i<=m; i++){
        fin>>type;

        switch (type){
            case 0:
                fin>>aux>>aux2;
                update(aux , -aux2);
                break;
            case 1:
                fin>>aux>>aux2;
                fout<<(get_sum(aux2) - get_sum(aux-1))<<"\n";
                break;

        }
    }

    fin.close();
    fout.close();

    return 0;
}