Cod sursa(job #2509494)

Utilizator AlexDontuAlex Dontu AlexDontu Data 14 decembrie 2019 11:55:51
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int i,n,v[100001],aint[400001],a,b,m,c;
void update (int nod, int x, int p, int st, int dr)
{
    if (st==dr)
    {
        aint[nod]=x;
    }
    else
    {
        int mid=(st+dr)/2;
        if (p<=mid) update(2*nod, x, p,st, mid);
        else update (2*nod+1, x, p, mid+1, dr);
        aint[nod]=max(aint[2*nod],aint[2*nod+1]);
    }

}int maxim (int nod, int st, int dr, int a, int b)
    {
        if (a<=st&&b>=dr)
            return aint[nod];
        int mid=(st+dr)/2,r1=-1e9,r2=-1e9;
        if (a<=mid) r1=maxim(2*nod,st,mid,a,b);
        if (b>mid) r2=maxim(2*nod+1,mid+1,dr,a,b);
        return max(r1,r2);
    }
int main()
{
    fin>>n>>m;
    for (i=1; i<=4*n; i++) aint[i]=1e9;
    for (i=1; i<=n; i++)
    {
        fin>>v[i];
        update (1,v[i],i,1,n);
    }
    for (i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        if (a==0)
            fout<<maxim(1,1,n,b,c)<<'\n';
        else update(1,c,b,1,n);
    }

    return 0;
}