Cod sursa(job #2127482)

Utilizator TudorVersoiuVersoiu Tudor Sorin TudorVersoiu Data 10 februarie 2018 18:04:20
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("aib.in" );
ofstream g("aib.out");

int BIT[100005], N, M, v[100005];

int getSum(int BITree[], int index)
{
    int sum = 0;

    while (index>0)
    {
        sum += BITree[index];
        index -= index & (-index);
    }
    return sum;
}

void updateBIT(int BITree[], int n, int index, int val)
{
    while (index <= n)
    {
       BITree[index] += val;
       index += index & (-index);
    }
}

void InitBITree(int v[], int N ,int BITree[]) {
    for ( int i=1; i<=N; i++ )
        updateBIT(BITree, N, i, v[i]);
}

int Problem3(int x)
{
    for ( int i=1; i<=N; i++ )
        if ( getSum(BIT, i) == x )
            return i;
}

int main()
{
    f >> N >> M;
    for ( int i=1; i<=N; i++ )
        f >> v[i];

    InitBITree(v, N, BIT);

    int OpType, a, b;
    for ( int i=1; i<=M; i++ )
    {
        f >> OpType >> a;
        if ( OpType < 2 ) f >> b;

        if ( OpType == 0 ) updateBIT(BIT, N, a, b);
        if ( OpType == 1 ) g << getSum(BIT, b) - getSum(BIT, a-1) << '\n';
        if ( OpType == 2 ) g << Problem3(a) << '\n';
    }
}