Cod sursa(job #2756274)

Utilizator NeacsuMihaiNeacsu Mihai NeacsuMihai Data 30 mai 2021 16:09:12
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>

#define NMAX 15000

using namespace std;

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

int N, M;
int aib[NMAX + 1];

void adaugAIB(int poz, int val){
    for(int i = poz; i <= N; i = i + ( (i ^ (i - 1)) + 1 ) / 2 ){
        aib[i] += val;
    }
}

int sumaAIB(int poz){
    int rez = 0;
    for(int i = poz; i > 0; i = i - ( (i ^ (i - 1)) + 1 ) / 2 ){
        rez = rez + aib[i];
    }

    return rez;
}

int main()
{
    fin >> N >> M;

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

        adaugAIB(i, x);
    }

    for(int q = 1; q <= M; q++){
        int tip, a, b;
        fin >> tip >> a >> b;

        if(tip == 0){
            adaugAIB(a, -b);
        }
        else {
            fout << sumaAIB(b) - sumaAIB(a - 1) << "\n";
        }
    }

    return 0;
}