Я использовал рекурсивный метод для создания segtree и обновить его, но мне не удалось получить индекс первого значения > x в моем диапазоне.
Я вставлю сюда весь свой код на случай, если это поможет:
Код: Выделить всё
//THIS IS THE GRADER, IGNORE UNTIL THE SOLUTION PART -------------------------------------
#include
#include
#include
using namespace std;
// Declaring variables
static int R;
static vector risultato1;
static vector risultato2;
// Declaring functions
void inizializza(int N, vector H);
// Functions ad-hoc for this grader
pair chiedi(int x);
void cambia(int x, int h);
void leggi_eventi(int M) {
for (int i = 0; i < M; i++) {
char tipo;
cin >> tipo;
if (tipo == 'Q') {
int x;
cin >> x;
pair risultato = chiedi(x);
risultato1[R] = risultato.first;
risultato2[R] = risultato.second;
R++;
} else {
int x, h;
cin >> x >> h;
cambia(x, h);
}
}
}
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
// Reading input
int N, M;
cin >> N >> M;
vector H(N);
risultato1.resize(M);
risultato2.resize(M);
for (int i = 0; i < N; i++) {
cin >> H[i];
}
// Calling functions
inizializza(N, H);
leggi_eventi(M);
// Writing output
for (int i = 0; i < R; i++) {
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78684865/how-do-i-get-the-first-value-x-in-a-segment-tree[/url]