Cod sursa(job #2567259)

Utilizator victorzarzuZarzu Victor victorzarzu Data 3 martie 2020 16:15:36
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int x, y, z;
int arbore[4 * 100000 + 5];
int maxim, val, pos, start, finish;

void Update(int nod, int st, int dr)
{
    if(st == dr)
    {
        arbore[nod] = val;
        return;
    }

    int div = (st + dr)/2;
    if(pos <= div)
        Update(2 * nod, st, div);
    else
        Update(2 * nod + 1, div + 1, dr);

    arbore[nod] = max(arbore[2 * nod], arbore[2 * nod + 1]);
}

void Query(int nod, int st, int dr)
{
    if(start <= st && dr <= finish)
    {
        if(maxim < arbore[nod])
            maxim = arbore[nod];
        return;
    }

    int div = (st + dr)/2;
    if(start <= div)
        Query(2 * nod, st, div);
    if(div < finish)
        Query(2 * nod + 1, div + 1, dr);
}

void Read()
{
    f>>n>>m;
    for(int i = 1;i <= n;++i)
    {
        f>>x;
        val = x;
        pos = i;

        Update(1, 1, n);
    }

    for(int i = 1;i <= m;++i)
    {
        f>>x>>y>>z;
        if(x == 0)
        {
            maxim = -1;
            start = y;
            finish = z;

            Query(1, 1, n);

            g<<maxim<<'\n';
        }
        else
        {
            pos = y;
            val = z;
            Update(1, 1, n);
        }
    }
}

int main()
{
    Read();
    return 0;
}