Cod sursa(job #2711979)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 24 februarie 2021 23:57:57
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <algorithm>

#define max(a, b) (a > b ? a : b)

using namespace std;

const int MAX_NUMBER = 123456;

int segmentTree[MAX_NUMBER];

void update(int node, int left, int right, int first, int last, int value) {
    if (left == right) {
        segmentTree[node] = value;
    }

    int mid = (left + right) / 2;

    if (first <= mid) {
        update(2 * node, left, mid, first, last, value);
    } else {
        update(2 * node + 1, mid + 1, right, first, last, value);
    }

    segmentTree[node] = max(segmentTree[2 * node], segmentTree[2 * node + 1]);
}

void query(int node, int left, int right, int first, int last, int &ans) {
    if (first <= left && right <= last) {
        ans = max(ans, segmentTree[node]);
        return;
    }

    int mid = (left + right) / 2;

    if (first <= mid) {
        update(2 * node, left, mid, first, last, ans);
    }

    if (mid < last) {
        update(2 * node + 1, mid + 1, right, first, last, ans);
    }
}

int main() {
    // Get some queries
}