Cod sursa(job #2776586)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 20 septembrie 2021 11:48:13
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
#define DIM 100005

using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

int n, m, aib[4 * DIM], ans;

void Update(int nod, int st, int dr, int val, int poz)
{
    if(st == dr)
    {
        aib[nod] = val;
        return ;
    }
    int mid = (st + dr) / 2;
    if(poz <= mid)
        Update(2 * nod, st, mid, val, poz);
    else
        Update(2 * nod + 1, mid + 1, dr, val, poz);
    aib[nod] = max(aib[2 * nod], aib[2 * nod + 1]);
}

void Query(int nod, int st, int dr, int stQ, int drQ)
{
    if(stQ <= st && dr <= drQ)
    {
        ans = max(ans, aib[nod]);
        return;
    }
    int mid = (st + dr) / 2;
    if(mid >= stQ)
        Query(2 * nod, st, mid, stQ, drQ);
    if(mid < drQ)
        Query(2 * nod + 1, mid + 1, dr, stQ, drQ);
}


int main()
{
    f >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        int x;
        f >> x;
        Update(1, 1, n, x, i);
    }

    for(; m; m--)
    {
        int ops, x, y;
        f >> ops >> x >> y;
        if(ops == 0)
        {
            ans = 0;
            Query(1, 1, n, x, y);
            g << ans << "\n";
        }
        else
            Update(1, 1, n, y, x);
    }


    return 0;
}