Cod sursa(job #3326476)

Utilizator brianabucur11Briana Bucur brianabucur11 Data 29 noiembrie 2025 09:35:19
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <bits/stdc++.h>
#define ub(x) (x&(-x))

using namespace std;

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

const int nmax = 1e5 + 5;

int n, m, aib[nmax];

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

int query (int poz)
{
    int s = 0;
    for (int i = poz; i >= 1; i -= ub(i))
        s += aib[i];
    return s;
}

int cb (int x)
{
    int origin = 0;
    for (int p = (1 << 17); p; p >>= 1)
    {
        if (origin + p <= n && query(origin + p) < x)
            origin += p;
    }
    if (query(origin + 1) == x)
        return origin + 1;
    return -1;
}

int main()
{
    int q;
    fin >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        int x;
        fin >> x;
        update(i,x);
    }
    for (int i = 1; i <= q; i++)
    {
        int cer;
        fin >> cer;
        if (cer == 0)
        {
            int poz, val;
            fin >> poz >> val;
            update(poz,val);
        }
        else if (cer == 1)
        {
            int st, dr;
            fin >> st >> dr;
            fout << query(dr) - query(st - 1) << '\n';
        }
        else
        {
            int val;
            fin >> val;
            fout << cb(val) << '\n';
        }
    }
    return 0;
}