Cod sursa(job #1678089)

Utilizator abramburelAlamita Alin abramburel Data 6 aprilie 2016 23:35:02
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<cstdio>
using namespace std;

#define Nmax 100005
int a[4*Nmax],n,m,x,maxim,op,y,poz,st,dr;

void update(int k,int p,int u){

    if(p==u)
        a[k] = x;
    else{
        int mij;
        mij=(p+u)/2;
        if(poz<=mij)
            update(2*k,p,mij);
        if(poz>mij)
            update(2*k+1,mij+1,u);
        a[k]=max(a[2*k],a[2*k+1]);

    }
}

void query(int k,int p,int u)
{
        if(st<=p && dr>=u) maxim=max(maxim,a[k]);

        else
            {
                int mij;
                mij=(p+u)/2;
                if(st<=mij)
                    query(2*k,p,mij);
                if(dr>mij)
                    query(2*k+1,mij+1,u);

            }
}

int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int i;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        cin>>x;
        poz=i;
        update(1,1,n);
    }

    for(i=1;i<=m;i++){
        cin>>op>>x>>y;
        if(op==0)
            {   maxim=0;st=x;dr=y;
                query(1,1,n);
                cout<<maxim<<"\n";
            }
        else
            update(1,1,n);

    }
    return 0;
}