Cod sursa(job #2730152)

Utilizator MateGMGozner Mate MateGM Data 25 martie 2021 20:34:01
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

using namespace std;

void act(int nod,int b,int j,int pos,int val,int arb[])
{
    if(b==j)
    {
        arb[nod]=val;
    }
    else {
        int m=(b+j)/2;
        if(pos<=m)
        {
            act(2*nod,b,m,pos,val,arb);
        }
        else act(2*nod+1,m+1,j,pos,val,arb);

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

}

void v2max(int nod,int a,int b,int bal,int jobb,int arb[],int &max1)
{
    if(a<=bal && jobb<=b)
    {
        if(max1<arb[nod])max1=arb[nod];
        return;
    }
    int m=(bal+jobb)/2;
    if(a<=m)v2max(2*nod,a,b,bal,m,arb,max1);
    if(m<b)v2max(2*nod+1,a,b,m+1,jobb,arb,max1);
}

int main()
{
    ifstream be("arbint.in");
    ofstream ki("arbint.out");
    int n,m;
    be>>n>>m;
    int x,y,a,b,max1;
    int arb[4*n+4]={0};
    for(int i=1;i<=n;i++)
    {
        y=i;
        be>>x;
        act(1,1,n,y,x,arb);
    }
    for(int i=1;i<=m;i++)
    {
        be>>x>>a>>b;
        if(x==0)
        {
            max1=-1;
            v2max(1,a,b,1,n,arb,max1);
            ki<<max1<<'\n';
        }
        else{
            act(1,1,n,a,b,arb);
        }
    }
    return 0;
}