Cod sursa(job #3031629)

Utilizator donCiuarinArin Donciu donCiuarin Data 20 martie 2023 15:07:27
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define NM 100005
#define AM 20

using namespace std;

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

int n, t, a, b, x;
bool q;
int arb[AM];

void update(int val, int k, int nod = 1, int st = 1, int dr = n)
{
    if(st >= dr)
    {
        arb[nod] = val;
        return;
    }
    int mij = (st + dr) / 2;
    if(k <= mij)
        update(val, k, nod * 2, st, mij);
    else
        update(val, k, nod * 2 + 1, mij + 1, dr);
    arb[nod] = max(arb[nod * 2], arb[nod * 2 + 1]);
}

int getMax(int a, int b, int nod = 1, int st = 1, int dr = n)
{
    if(a <= st && dr <= b)
        return arb[nod];
    int mij = (st + dr) / 2, x = -1;
    if(a <= mij)
        x = max(x, getMax(a, b, nod * 2, st, mij));
    if(mij < b)
        x = max(x, getMax(a, b, nod * 2 + 1, mij + 1, dr));
    return x;
}

int main()
{
    int i;
    fin >> n >> t;
    for(i = 1; i <= n; i++)
    {
        fin >> x;
        update(x, i);
    }
    for(; t; t--)
    {
        fin >> q >> a >> b;
        if(q)
            update(b, a);
        else
            fout << getMax(a, b) << '\n';
    }
    return 0;
}