Cod sursa(job #3234051)

Utilizator betybety bety bety Data 6 iunie 2024 10:23:11
Problema Arbori indexati binar Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int lim = 1e5 + 4;
int aib[lim];
int n, m;
int t, x, y, z;
void update(int k, int a) {
  for (; k <= n; k += k & -k) {
    aib[k] += a;
  }
}
int query(int k) {
  int sum = 0;
  for (; k > 0; k -= k & -k) {
    sum += aib[k];
  }
  return sum;
}
int main() {
  in >> n >> m;
  for (int i = 1; i <= n; ++i) {
    in >> x;
    update(i, x);
  }
  while (m--) {
    in >> t;
    if (t == 0) {
      in >> x >> y;
      update(x, y);
    } else if (t == 1) {
      in >> x >> y;
      out << query(y) - query(x - 1) << '\n';
    } else {
      in >> x;
      int l = 1, r = n, med;
      while (l < r) {
        med = (l + r) >> 1;
        if (query(med) < x) {
          l = med + 1;
        } else {
          r = med;
        }
      }
      if (query(l) == x) {
        out << l << '\n';
      } else {
        out << -1 << '\n';
      }
    }
  }
  return 0;
}