Cod sursa(job #2722500)

Utilizator georgipGeorgiana Petricele georgip Data 12 martie 2021 21:43:39
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int arb[400102],n,m,i,j,x,tip,a,b,pos,val,st,dr,inc,sfar,maxi;
void calc(int nod,int st,int dr)
{
     if(inc<=st&&dr<=sfar)
     {
          if(maxi<arb[nod])
            maxi=arb[nod];
            return;
     }
     if(inc<=(st+dr)/2)
        calc(2*nod,st,(st+dr)/2);
     if((st+dr)/2<sfar)
        calc(2*nod+1,(st+dr)/2+1,dr);
}
void modif(int nod,int st,int dr)
{
    if(st==dr)
    {
        arb[nod]=val;
        return;
    }
    if(pos<=(st+dr)/2)
        modif(2*nod,st,(st+dr)/2);
    else
        modif(2*nod+1,(st+dr)/2+1,dr);
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
        {
            fin>>x;
            pos=i;
            val=x;
            modif(1,1,n);
        }
    for(i=1;i<=m;i++)
    {
        fin>>tip>>a>>b;
        if(tip==0)
        {
            maxi=-1;
            inc=a;
            sfar=b;
            calc(1,1,n);
            fout<<maxi<<'\n';
        }
        else
        {
            pos=a;
            val=b;
            modif(1,1,n);
        }

    }
    return 0;
}