Cod sursa(job #2497885)

Utilizator Vladv01Vlad Vladut Vladv01 Data 23 noiembrie 2019 11:53:43
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,arb[400005],pos,x,a,b;

void modif(int pos,int x,int st,int dr,int ind)
{
    if(st==dr)
    {
        arb[ind]=x;
        return;
    }
    int mij=(st+dr)/2;
    if(pos<=mij)
        modif(pos,x,st,mij,ind*2);
    else if(pos>mij)
        modif(pos,x,mij+1,dr,ind*2+1);
    arb[ind]=max(arb[2*ind],arb[2*ind+1]);
}

int afismax(int a,int b,int st,int dr,int ind)
{
    if(st>=a && dr<=b)
        return arb[ind];
    int mij=(st+dr)/2;
    if (b<=mij)
        return afismax(a, b,st, mij,2 * ind);
    if (a>mij)
        return afismax(a, b, mij+1, dr, 2 * ind + 1);
    return max(afismax(a,b, st, mij, 2 * ind), afismax(a,b,mij+1,dr,2 * ind + 1));

}

int main()
{
    f>>n>>m;
    int x;
    for(int i=1;i<=n;i++)
    {
        f>>x;
        modif(i, x,1, n,1);
    }
    int c;

    for(int i=1;i<=m;i++)
    {
        f>>c;
        if(c==1)
        {
            f>>pos>>x;
            modif(pos,x,1,n,1);


        }
        else
        {
            f>>a>>b;
            g<<afismax(a,b,1,n,1)<<'\n';
        }
    }
    return 0;
}