Cod sursa(job #2903163)

Utilizator razvan1234Danciu Razvan razvan1234 Data 17 mai 2022 10:46:35
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");

int arb_int[400001];
void facere(int nod, int st, int dr, int poz, int val)
{
    if (poz < st or poz > dr) return;
    if (st == dr){
        arb_int[nod] = val;
        return;
    }

    int mjl = (st + dr) / 2;
    facere(2*nod, st, mjl, poz, val);
    facere(2*nod+1, mjl+1, dr, poz, val);

    arb_int[nod] = max(arb_int[2*nod], arb_int[2*nod+1]);
}

int get_max(int nod, int st, int dr, int q_st, int q_dr)
{
    if (q_st > dr or q_dr < st) return 0;
    if (st >= q_st and dr <= q_dr) return arb_int[nod];

    int mjl = (st + dr) / 2;
    return max(get_max(2*nod, st, mjl, q_st, q_dr), get_max(2*nod+1, mjl+1, dr, q_st, q_dr));
}

void change (int nod, int st, int dr, int a, int b)
{
    if (a > dr or b < st) return;
    if (st == dr){
        arb_int[nod] = b;
    }

    int mjl = (st + dr) / 2;
    if (a <= mjl) change(2*nod, st, mjl, a, b);
    else change(2*nod+1, mjl+1, dr, a, b);

    arb_int[nod] = max(arb_int[2*nod], arb_int[2*nod+1]);
}
int main()
{
    int n, t;
    fin>>n>>t;

    for (int i = 1; i <= n; i++){
        int a;
        fin>>a;
        facere(1, 1, n, i, a);
    }
    for (int i = 1; i <= t; i++){
        int op, a, b;
        fin>>op>>a>>b;
        if (op == 0){
            fout<<get_max(1, 1, n, a, b)<<"\n";
        }
        else{
            facere(1, 1, n, a, b);
        }
    }
    return 0;
}