Cod sursa(job #2593664)

Utilizator victorzarzuZarzu Victor victorzarzu Data 4 aprilie 2020 13:22:39
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define dim 100000

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int x, y;
int pos, val, maxim;
int a, b;
int arb[4 * dim + 66];

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

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


void Query(int nod, int st, int dr)
{
    if(a <= st && dr <= b)
    {
        maxim = max(maxim, arb[nod]);
        return;
    }

    int mid = (st + dr) / 2;
    if(a <= mid)
        Query(2 * nod, st, mid);
    if(mid < b)
        Query(2 * nod + 1, mid + 1, dr);
}

void Read()
{
    f>>n>>m;
    for(int i = 1;i <= n;++i)
    {
        f>>val;
        pos = i;
        Update(1, 1, n);
    }
    for(int i = 1;i <= m;++i)
    {
        f>>x>>a>>b;
        if(x == 0)
        {
            maxim = -1;
            Query(1, 1, n);

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

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