Cod sursa(job #2401402)

Utilizator CraciunAlexCraciun Alexandru CraciunAlex Data 9 aprilie 2019 18:04:37
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>

using namespace std;


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

int arb[1<<18], a, b, poz, val;

int qwery (int p, int st, int dr)
{
    if (a<=st && dr<=b)
        return arb[p];
    int m=(st+dr)/2, m1=-1, m2=-1;
    if (a<=m)
        m1=qwery(2*p, st, m);
    if (b>m)
        m2=qwery(2*p+1, m+1, dr);
    return max(m1, m2);
}

void update (int p, int st, int dr)
{
    if (st==dr)
    {
        arb[p]=val;
        return;
    }
    int m=(st+dr)/2;
    if (poz<=m)
        update (2*p, st, m);
    else
        update (2*p+1, m+1, dr);
    arb[p]=max(arb[2*p], arb[2*p+1]);
}

int main()
{
    int n, m, x;
    in>>n>>m;
    for (int i=1; i<=n; i++)
    {
        in>>val;
        poz = i;
        update(1, 1, n);
    }

    for (int i=1; i<=m; i++)
    {
        in>>x>>a>>b;
        if (x==0)
            out<<qwery(1, 1, n)<<"\n";
        else
        {
            poz = a;
            val = b;
            update(1, 1, n);
        }
    }
    return 0;
}