Cod sursa(job #2311469)

Utilizator dragos99Homner Dragos dragos99 Data 3 ianuarie 2019 12:07:10
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>

using namespace std;

    ifstream f("datorii.in");
    ofstream g("datorii.out");

long n, m, a[15001], aib[15001];

int printAIB(int stop_poz)
{
    int sum = 0 ;
    while(stop_poz > 0){
        sum += aib[stop_poz];
        stop_poz -= stop_poz & (-stop_poz);
    }
    return sum;
}

void updateAIB(int start_poz, int val_sub)
{
    for(int i = start_poz ; i <= n ; i += i & (-i)){
        aib[i] -= val_sub;
    }
}

void buildAIB()
{
    for(int i = 1 ; i <= n ; i++){
        aib[i] = a[i];
    }
    for(int i = 1 ; i <= n ; i++){
        if(i + (i & (-i)) <= n){
            aib[i + (i & (-i))] += aib[i];
        }
    }
}

int main()
{
    int cod, p, q;
    f>>n>>m;
    for(int i = 1 ; i <= n ; i++){
        f>>a[i];
    }
    buildAIB();
    for(int i = 1 ; i <= m ; i++){
        f>>cod>>p>>q;
        if(cod == 0)
            updateAIB(p, q);
        if(cod == 1)
            g<< printAIB(q) - printAIB(p - 1) << '\n';
    }
    return 0;
}