Cod sursa(job #2856580)

Utilizator Mihai7218Bratu Mihai-Alexandru Mihai7218 Data 24 februarie 2022 08:55:01
Problema Arbori indexati binar Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int a, i, b, n, op, m, j, x;
vector <int> aib;
void update (int poz, int val)
{
    for (int i = poz; i <= n; i += i & (-i))
        aib[i]+=val;
}
int query (int a)
{
    int suma = 0;
    for (int i = a; i > 0; i -= i&(-i))
        suma += aib[i];
    return suma;
}
int main()
{
    fin >> n >> m; aib.resize(n+1);
    for (i = 1; i <= n; i++)
    {
        fin >> x;
        update (i, x);
    }
    for (i = 1; i <= m; i++)
    {
        fin >> op;
        if (op == 0)
        {
            fin >> a >> b;
            update (a, b);
        }
        else if (op == 1)
        {
            fin >> a >> b;
            fout << query (b) - query (a-1) << "\n";
        }
        else if (op == 2)
        {
            fin >> a;
            j = 1;
            while (1)
            {
                int s = query (j);
                if (s > a)
                {
                    fout << "-1\n";
                    break;
                }
                else if (s == a)
                {
                    fout << j << '\n';
                    break;
                }
                j++;
            }
        }
    }
    return 0;
}