Cod sursa(job #2171473)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 15 martie 2018 12:28:31
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
int vnod[200010];
int n,m,x,poz,l,r,maxim,a,b,c;
void inserare(int nod, int st, int dr)
{
    if(st==dr)
    {
        vnod[nod]=x;
        return ;
    }
    int mij=(st+dr)/2;
    if(poz<=mij) inserare(2*nod,st,mij);
    else inserare(2*nod+1,mij+1,dr);
    vnod[nod]=max(vnod[2*nod],vnod[2*nod+1]);
}
void cautare(int nod, int st, int dr)
{
    if(l<=st && dr<=r)
    {
        maxim=max(maxim,vnod[nod]);
        return ;
    }
    int mij=(st+dr)/2;
    if(l<=mij)
        cautare(2*nod,st,mij);
    if(mij<r)
        cautare(2*nod+1,mij+1,dr);
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    cin>>n>>m;
    memset(vnod,-10, sizeof vnod);
    for(int i=1;i<=n;++i)
    {
        poz=i;
        cin>>x;
        inserare(1,1,n);
    }
    for(int i=0;i<m;++i)
    {
        cin>>c>>a>>b;
        if(c==0)
        {
            maxim=-1;
            l=a, r=b;
            cautare(1,1,n);
            cout<<maxim<<"\n";
        }
        else
        {
            poz=a, x=b;
            inserare(1,1,n);
        }
    }
    return 0;
}