Cod sursa(job #2900582)

Utilizator a.dulumanDuluman Andrada-Georgiana a.duluman Data 11 mai 2022 13:14:58
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#define N 100001

using namespace std;

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

int aint[4*N];

void update(int node, int left, int right, int poz, int val)
{
    if(left == right) 
        {aint[node] = val; return;}

    int mijl = (left + right) / 2;
    if(poz <= mijl) 
        update(2 * node, left, mijl, poz, val);
    else update(2 * node + 1, mijl + 1, right, poz, val);
    aint[node] = max(aint[2 * node], aint[2 * node + 1]);
}

int query(int node, int left, int right, int a, int b)
{
    if(a <= left && right <= b)
        return aint[node];
    int val1, val2;
    int mijl = (left + right) / 2;
    if(a <= mijl) 
        val1 = query(2 * node, left, mijl, a, b);
    if(b > mijl) 
        val2 = query(2 * node + 1, mijl + 1, right, a, b);
    return max(val1, val2);
}

int main()
{   
    int n, m;
    int x, i, task, a, b;

    fin >> n >> m;

    for(i = 1; i <= n; i++)
        {
            fin >> x;
            update(1, 1, n, i, x);
        }

    for(i = 1; i <= m; i++)
    {
        fin >> task >> a >> b;
        if(task == 0) fout << query(1, 1, n, a, b) << "\n";
        else if(task == 1) update(1, 1, n, a, b);
    }
}