Cod sursa(job #2377083)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 8 martie 2019 21:33:13
Problema Arbori de intervale Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <cstdio>

using namespace std;

int n,m,val[100005],c,x,y;
int a[300005];

void update(int st, int dr, int pos, int nod){
    if(st==dr){
        a[nod]=val[st];
        return;
    }
    int mij=(st+dr)/2;
    if(pos<=mij)
        update(st,mij,pos,2*nod);
    else
        update(mij+1,dr,pos,2*nod+1);

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

int caut(int st, int dr, int nod){
    if(x<=st && dr<=y)
        return a[nod];
    int mij = (st+dr)/2, r1=-1, r2=-1;
    if(x<=mij)
        r1=caut(st,mij,2*nod);
    if(mij+1<=y)
        r2=caut(mij+1,dr,2*nod+1);
    return max(r1,r2);
}

int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    ios::sync_with_stdio(false);

    cin>>n>>m;
    for(int i=1;i<=n;++i){
        cin>>val[i];
        update(1,n,i,1);
    }
    for(int i=0;i<m;++i){
        cin>>c>>x>>y;
        if(c==0){
            cout<<caut(1,n,1)<<"\n";
        }
        else{
            val[x]=y;
            update(1,n,x,1);
        }
    }
    return 0;
}