Cod sursa(job #2611168)

Utilizator stefantagaTaga Stefan stefantaga Data 6 mai 2020 15:21:04
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arb[400005],maxi,n,m,i,x,y,tip,a,b;
void update (int st,int dr,int nod,int poz,int val)
{
    if (st==dr)
    {
        arb[nod]=val;
        return ;
    }
    int mij=(st+dr)/2;
    if (poz<=mij)
    {
        update(st,mij,2*nod,poz,val);
    }
    else
    {
        update(mij+1,dr,2*nod+1,poz,val);
    }
    arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void maxim (int st,int dr,int nod ,int a,int b)
{
    if (a<=st&&dr<=b)
    {
        maxi=max(maxi,arb[nod]);
        return ;
    }
    int mij=(st+dr)/2;
    if (a<=mij)
    {
        maxim(st,mij,2*nod,a,b);
    }
    if (b>mij)
    {
        maxim(mij+1,dr,2*nod+1,a,b);
    }
}
int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        f>>x;
        update(1,n,1,i,x);
    }
    for (i=1;i<=m;i++)
    {
        f>>tip>>a>>b;
        if (tip==0)
        {
            maxi=0;
            maxim(1,n,1,a,b);
            g<<maxi<<'\n';
        }
        else
        {
            update(1,n,1,a,b);
        }
    }
    return 0;
}