Cod sursa(job #3196630)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 24 ianuarie 2024 13:34:33
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int nmax = 100500;

int n, aib[nmax], sol, a[nmax], m;

int ub(int x)
{
    return (x&(-x));
}

void add(int p, int val)
{
    for(int i = p; i <= n; i += ub(i))
        aib[i] += val;
}

int sum(int p)
{
    int rez = 0;
    for(int i = p; i >= 1; i -= ub(i))
        rez += aib[i];

    return rez;
}

int found(int x)
{
    for(int i = 1; i <= n; i += ub(i))
        if(sum(i) == x)
            return i;

    return -1;
}

int main()
{
    f >> n >> m;
    for(int i = 1; i <= n; i ++)
    {
        int x;
        f >> x;
        add(i, x);
    }

    for(int i = 1; i <= m; i ++)
    {
        int tip;
        f >> tip;
        if(tip == 0)
        {
            int a, x;
            f >> a >> x;
            add(a, x);
        }

        else if(tip == 1)
        {
            int a, b;
            f >> a >> b;
            g << sum(b) - sum(a - 1) << '\n';
        }

        else
        {
            int x;
            f >> x;
            g << found(x) << '\n';
        }
    }

    return 0;
}