Cod sursa(job #2884324)

Utilizator ALEXbrPopa Ioan Alexandru ALEXbr Data 2 aprilie 2022 21:26:16
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

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

int A[400001], n, m, a, b;
void arbintSet(int nod=1, int st=1, int dr=n)
{
    if (st==dr)
    {
        A[nod] = b;
        return;
    }
    int mj = (st+dr)/2;
    if (a<=mj)
        arbintSet(nod*2, st, mj);
    else
        arbintSet(nod*2+1, mj+1, dr);
    A[nod]=max(A[nod*2], A[nod*2+1]);
}
int arbintGet(int nod=1, int st=1, int dr=n)
{
    if (a<=st&&dr<=b)
    {
        return A[nod];
    }
    int mj = (st+dr)/2, r=-1;
    if (a<=mj)
        r=max(r, arbintGet(nod*2, st, mj));
    if (mj<b)
        r=max(r, arbintGet(nod*2+1, mj+1, dr));
    return r;
}
int main()
{
    fin>>n>>m;
    for (a=1; a<=n; a++)
    {
        fin>>b;
        arbintSet();
    }
    for (int i=1; i<=m; i++)
    {
        int op;
        fin>>op>>a>>b;
        if (op==0)
            fout<<arbintGet()<<'\n';
        if (op==1)
            arbintSet();
    }
    fin.close();
    fout.close();
	return 0;
}