Cod sursa(job #3340870)

Utilizator Gerald123Ursan George Gerald123 Data 16 februarie 2026 20:59:58
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
/// patratele
#include <bits/stdc++.h>
using namespace std;

#define NMAX 100005

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

int i, ab[NMAX], v[NMAX], m, c, x, y, n, a, b;

void up(int poz, int val)
{
  v[poz] += val;
  for (int i = poz; i <= n; i += (i & -i))
    ab[i] += val;
}

int qu(int poz)
{
  int ras = 0;
  for (int i = poz; i >= 1; i -= (i & -i))
    ras += ab[i];
  return ras;
}

int main()
{
  // ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  fin >> n >> m;
  for (i = 1; i <= n; i++)
  {
    fin >> x;
    up(i, x);
  }
  for (i = 1; i <= m; i++)
  {
    fin >> c;
    if (c == 0)
    {
      fin >> a >> b;
      up(a, b);
    }

    else if (c == 1)
    {
      fin >> a >> b;
      fout << qu(b) - qu(a - 1) << '\n';
    }
    else
    {
      fin >> a;
      b = log2(n);
      c = 0;
      while (b >= 0 && c <= n)
      {
        if (qu(c + (1 << b)) < a && c + (1 << b) <= n)
          c += (1 << b);
        b--;
      }
      if (qu(c) + v[c + 1] == a)
        fout << c + 1 << '\n';
      else
        fout << -1 << '\n';
    }
  }
  return 0;
}