Cod sursa(job #2757183)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 4 iunie 2021 12:09:38
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

int t[1000000], poz, val, a, b, n, q;

void actualizare(int p, int st, int dr)
{
    if (st == dr)
    {
        t[p] = val;
        return;
    }
    int m = (st + dr) / 2;
    if (poz <= m)
        actualizare(2 * p, st, m);
    else
        actualizare(2 * p + 1, m + 1, dr);
    t[p] = max(t[2 * p], t[2 * p + 1]);
}

int interogare(int p,int st,int dr)
{
    if(a<=st && dr<=b)
        return t[p];
    int m=(st+dr)/2,rezst=0,rezdr=0;
    if(a<=m)
        rezst=interogare(2*p,st,m);
    if(m<b)
        rezdr=interogare(2*p+1,m+1,dr);
    return max(rezst,rezdr);
}

int main()
{
    ifstream in("arbint.in");
    ofstream out("arbint.out");
    in >> n >> q;
    for (poz=1; poz<=n; poz++)
    {
        in >> val;
        actualizare(1, 1, n);
    }
    while (q)
    {
        q--;
        bool tip;
        in >> tip;
        if (tip)
        {
            in >> poz >> val;
            actualizare(1, 1, n);

        }
        else
        {
            in >> a >> b;
            out << interogare(1, 1, n) << '\n';
        }
    }
    return 0;
}