Cod sursa(job #2563034)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 29 februarie 2020 21:53:26
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>

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

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

void update(int st, int dr, int nod)
{
    if(st==dr)
        arb[nod]=x;
    else
    {
        int mij=(st+dr)/2;
        if(poz<=mij)
            update(st,mij,2*nod);
        else
            update(mij+1,dr,2*nod+1);
        arb[nod]=max(arb[2*nod],arb[2*nod+1]);
    }
}
void solve(int st, int dr, int nod)
{
    if(a<=st && dr<=b)
        val=max(val,arb[nod]);
    else
    {
        int mij=(st+dr)/2;
        if(a<=mij)
            solve(st,mij,2*nod);
        if(mij+1<=b)
            solve(mij+1,dr,2*nod+1);
    }
}
int main()
{
    int n,m,caz;
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        f>>x;
        poz=i;
        update(1,n,1);
    }
    while(m--)
    {
        f>>caz>>a>>b;
        if(caz)
        {
           poz=a;
           x=b;
           update(1,n,1);
        }
        else
        {
            val=0;
            solve(1,n,1);
            g<<val<<'\n';
        }
    }
    f.close();
    g.close();
    return 0;
}