Cod sursa(job #2499756)

Utilizator vladsirbu23Vlad Sirbu vladsirbu23 Data 26 noiembrie 2019 18:26:19
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.09 kb
#include <iostream>

#include <fstream>

#define f first

#define s second

using namespace std;

ifstream fin("arbint.in");

ofstream fout("arbint.out");

pair<pair<int,int>,int> arb[500015];

int n,m,a,b,v[100010],maxx;



void actualizare(int nod)

{

    int st,dr,mij;

    st=arb[nod].f.f;

    dr=arb[nod].f.s;

    if(a==st&&a==dr)

    {

        arb[nod].s=b;

    }

    else

    {

        mij=(st+dr)/2;

        if(a<=mij)

            actualizare(2*nod);

        else

            actualizare(2*nod+1);

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

    }

}



void maxim(int nod)

{

    int st,dr,mij,val;

    st=arb[nod].f.f;

    dr=arb[nod].f.s;

    if(a<=st&&dr<=b)

    {

        val=arb[nod].s;

        maxx=max(maxx,val);

    }

    else

    {

        mij=(st+dr)/2;

        if(a<=mij)

            maxim(2*nod);

        if(b>mij)

            maxim(2*nod+1);

    }

}



void construire(int nod,int st,int dr)

{

    int mij;

    arb[nod].f.f=st;

    arb[nod].f.s=dr;

    if(st!=dr)

    {

        mij=(st+dr)/2;

        construire(2*nod,st,mij);

        construire(2*nod+1,mij+1,dr);

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

    }

    else

    {

        arb[nod].s=v[st];

    }

}



void afisare(int nod)

{

    int st,dr,val;

    st=arb[nod].f.f;

    dr=arb[nod].f.s;

    val=arb[nod].s;

    if(st!=dr)

    {

        afisare(2*nod);

    }

    fout<<st<<" "<<dr<<" "<<val<<'\n';

    if(st!=dr)

    {

        afisare(2*nod+1);

    }

}



int main()

{

    int i,j,cer;

    fin>>n>>m;

    for(i=1; i<=n; i++)

        fin>>v[i];

    construire(1,1,n);

    // afisare(1);

    for(i=1; i<=m; i++)

    {

        fin>>cer;

        fin>>a>>b;

        if(cer==0)

        {

            maxx=0;

            maxim(1);

            fout<<maxx<<'\n';

        }

        else

        {

            actualizare(1);

        }

    }

}