Cod sursa(job #2356302)

Utilizator crion1999Anitei cristi crion1999 Data 26 februarie 2019 16:48:23
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fi("aib.in");
ofstream fo("aib.out");
int N;
int M;

int aib[NMAX];

int val, a, b, type;

void Update(int pos, int value)
{
    for(int i = pos; i <= N; i += ((i) & (-i)))
        aib[i] += value;
}

int Query(int pos)
{
    int sum = 0;
    for(int i = pos; i ; i -= ((i) & (-i)))
        sum += aib[i];

    return sum;
}

int Findd(int value)
{
    for(int i = 1; i <= N; ++i)
        if(Query(i) == value)
            return  i;
    return -1;
}


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

    for(int i = 1; i <= N; ++i)
    {
        fi >> val;
        Update(i, val);
    }

    for(int i = 1; i <= M; ++i)
    {
        fi >> type;

        if(type == 0)
        {
            fi >> a >> b;
            Update(a, b);
        }
        else if(type == 1)
        {
            fi >> a >> b;
            fo << Query(b) - Query(a - 1) << "\n";
        }
        else if(type == 2)
        {
            fi >> a;
            fo << Findd(a) << "\n";
        }
    }
}