Cod sursa(job #2574580)

Utilizator niculaandreiNicula Andrei Bogdan niculaandrei Data 6 martie 2020 00:03:33
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>
#define N_MAX 100005

using namespace std;

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

int N, M;
int AINT[2 * N_MAX];

void Update(int node, int le, int ri, int x, int poz)
{
    if (le == ri)
    {
        AINT[node] = x;
        return;
    }

    int mid = (le + ri) / 2;
    if (poz <= mid)
        Update(2 * node, le, mid, x, poz);
    else
        Update(2 * node + 1, mid + 1, ri, x, poz);

    AINT[node] = max(AINT[2 * node], AINT[2 * node + 1]);
}

int Query(int node, int le, int ri, int Qle, int Qri)
{
    if (le == Qle && ri == Qri)
        return AINT[node];

    int mid = (le + ri) / 2, ret = 0;
    if (Qle <= mid)
        ret = max(ret, Query(2 * node, le, mid, Qle, mid));
    if (mid < Qri)
        ret = max(ret, Query(2 * node + 1, mid + 1, Qri, mid + 1, Qri));
    return ret;
}

int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; i++)
    {
        int x;
        fin >> x;
        Update(1, 1, N, x, i);
    }

    while (M--)
    {
        int op, a, b;
        fin >> op >> a >> b;
        if (op == 0)
            fout << Query(1, 1, N, a, b) << "\n";
        else
            Update(1, 1, N, b, a);
    }
    return 0;
}