Cod sursa(job #2099790)

Utilizator AndreiTurcasTurcas Andrei AndreiTurcas Data 4 ianuarie 2018 17:58:48
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#define mx 100005
using namespace std;

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

int AIMax[4*mx], n, m, pos, val, x, y, Max;

void Update(int node, int lt, int rt)
{
    if(lt == rt)
    {
        AIMax[node] = val;
        return;
    }
    int mid = (lt + rt)/2;
    if(pos <= mid) Update (2*node, lt, mid);
    else Update(2*node+1, mid+1, rt);
    AIMax[node] = max(AIMax[2*node], AIMax[2*node+1]);
}

void Query(int node, int lt, int rt)
{
    if(x <= lt && rt <= y)
    {
        Max = max(Max, AIMax[node]);
        return;
    }
    int mid = (lt + rt)/2;
    if(x <= mid) Query(2*node, lt, mid);
    if(mid < y) Query(2*node+1, mid+1, rt);
}

int main()
{
    f >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        pos = i;
        f >> val;
        Update(1, 1, n);
    }
    for(int i = 1; i <= m; ++i)
    {
        int k;
        f >> k;
        if(k)
        {
            f >> pos >> val;
            Update(1, 1, n);
        }
        else
        {
            Max = -1;
            f >> x >> y;
            Query(1, 1, n);
            g << Max << "\n";
        }
    }
}