Cod sursa(job #2723349)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 13 martie 2021 22:13:26
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");

const int NM=1e5+5;

int poz,val,x,y,ai[4*NM];

void Update(int nod,int st,int dr)
{   if(st==dr)
    {   ai[nod]=val;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        Update(2*nod,st,mij);
    else
        Update(2*nod+1,mij+1,dr);
    ai[nod]=max(ai[2*nod],ai[2*nod+1]);
}

int Query(int nod,int st,int dr)
{   if(st>=x && dr<=y)
        return ai[nod];
    int mij=(st+dr)/2;
    int maxSt=0,maxDr=0;
    if(x<=mij)
        maxSt=Query(2*nod,st,mij);
    if(y>mij)
        maxDr=Query(2*nod+1,mij+1,dr);
    return max(maxSt,maxDr);
}

int main()
{   int n,m;
    f>>n>>m;
    for(int a,i=1; i<=n; i++)
    {   f>>a;
        poz=i;
        val=a;
        Update(1,1,n);
    }
    for(int t; f>>t>>x>>y;)
    {   if(!t)
            g<<Query(1,1,n)<<'\n';
        else
        {   poz=x;
            val=y;
            Update(1,1,n);
        }
    }
    g.close();
    return 0;
}