Cod sursa(job #3319815)

Utilizator StonkDavid Andrei Mateis Stonk Data 3 noiembrie 2025 12:22:23
Problema Arbori indexati binar Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <iostream>
using namespace std;

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

int nums[100001];

int lsb(int n) {
  return (n & (-n));
}

void modi(int p, int val, int cap) {
  for(int i = p; i <= cap; i += lsb(i)){
    nums[i] += val;
  }
}

int sum(int p, int cap){
  if(p > cap) {
    p = cap;
  }
  int suma = 0;
  for(int i = p; i >= 1; i -= lsb(i)) {
    suma += nums[i];
  }
  return suma;
}

int cb(int k, int cap) {
  int ans = 0;
  //int suma = sum(cap, cap);
  for(int pas = (1 << 17); pas > 0; pas /= 2){
    if (ans + pas <= cap && sum(ans + pas, cap) < k){
      ans += pas;
    }
  }

  return ans + 1;
}

int main() {
  int N, M;

  fin >> N >> M;
  for(int i = 1; i <= N; i++){
    int u; fin >> u;
    modi(i, u, N);
  }
/*
  for(int i = 1; i <= N; i++){
    cout << nums[i] << ' ';
  }

  cout << '\n';
*/
  for(int cer = 0; cer < M; cer++){
    int t, a, b;
    fin >> t >> a;

    if(t == 2){
      fout << cb(a, N) << '\n';
      continue;
    }

    if(t == 0){
      fin >> b;
      modi(a, b, N);
    }

    if(t == 1){
      fin >> b;
      fout << sum(b, N) - sum(a - 1, N) << '\n';
    }
    
  }


  return 0;
}