Cod sursa(job #2850459)

Utilizator XyanEusebiu Pusca Xyan Data 16 februarie 2022 20:08:43
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int t[400010];
int ql, qr, nmax;
int up, uv;


void update(int pos, int l, int r)
{
    if (l == r)
    {
        t[pos] = uv;
        return;
    }
    int mid = (l + r) / 2;
    if (up <= mid)
    {
        update(pos * 2, l, mid);
    }
    else
    {

        update(pos * 2 + 1, mid + 1, r);
    }
    t[pos] = max(t[pos * 2], t[pos * 2 + 1]);
    return;
}

void query(int pos, int l, int r)
{
    if (l >= ql && r <= qr)
    {
        nmax = max(nmax, t[pos]);
        return;
    }
    int mid = (l + r) / 2;
    if (ql <= mid) query(pos * 2, l, mid);
    if (qr > mid) query(pos * 2 + 1, mid + 1, r);
}

int main()
{
    int N, M, X;
    fin >> N >> M;
    for (int i = 1; i <= N; i++)
    {
        up = i;
        fin >> uv;
        update(1, 1, N);

    }
    int a, b;
    bool o;
    for (int i = 1; i <= M; i++)
    {
        fin >> o >> a >> b;
        if (!o)
        {
            ql = a;
            qr = b;
            nmax = -1;
            query(1, 1, N);
            fout << nmax << "\n";
        }
        else
        {            
            up = a;
            uv = b;
            update(1, 1, N);
        }
    }
    return 0;
}