Cod sursa(job #3277200)

Utilizator tileadavidtileadavid tileadavid Data 15 februarie 2025 13:35:35
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;

ifstream cin ("arbint.in");
ofstream cout ("arbint.out");

int arbint[4 * 100005];

void mcdonalds (int l, int r, int poz, int x, int node){
    if (l == r){
        arbint[node] = x;
        return;
    }

    int mid = (l + r) / 2;
    if (poz <= mid){
        mcdonalds(l, mid, poz, x, node * 2);
    }
    else{
        mcdonalds(mid + 1, r, poz, x, node * 2 + 1);
    }

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

}

int pepene (int l, int r, int a, int b, int node){
    if (a <= left and right <= b){
        return arbint[node];
    }

    int mid = (l + r) / 2;

    int soll = 0, solr = 0;

    if (a <= mid){
        soll = pepene(l, mid, a, b, node * 2);
    }
    if (mid + 1 <= b){
        solr = pepene (mid + 1, r, a, b, node * 2 + 1);
    }

    return max (soll, solr);

}

int main()
{
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; ++i){
        int x;
        cin >> x;
        mcdonalds(1, n, i, x, 1);
    }

    for (int i = 1; i <= q; ++i){
        int a, b, c;
        cin >> c >> a >> b;
        if (c == 1){
            mcdonalds(1, n, a, b, 1);
        }
        else{
            cout << pepene(1, n, a, b, 1);
        }
    }

    return 0;
}