Cod sursa(job #407262)

Utilizator hasegandaniHasegan Daniel hasegandani Data 2 martie 2010 10:36:34
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<stdio.h>

#define Nmax 500005

int arb[Nmax],N,M;
int best,in,sf;

int max(int a,int b)
{
    return (a<b?b:a);
}

void querry(int nod,int st,int dr)
{
    if (in<=st && dr<=sf)
        {
        best=max(best,arb[nod]);
        return ;
        }

    int mid=st+(dr-st)/2;
    if (in<=mid) querry(2*nod,st,mid);
    if (mid<sf)  querry(2*nod+1,mid+1,dr);
}

void ins(int nod,int st,int dr,int poz,int val)
{
    if (st==dr)
        {
        arb[nod]=val;
        return ;
        }

    int mid=st+(dr-st)/2;
    if (poz<=mid) ins(2*nod,st,mid,poz,val);
    else ins(2*nod+1,mid+1,dr,poz,val);

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

void solve()
{
    int a,b,c;
    for(int i=1;i<=M;++i)
        {
        scanf("%d%d%d",&a,&b,&c);
        if (!a)
            {
            in=b;
            sf=c;
            best=-1;
            querry(1,1,N);
            printf("%d\n",best);
            }
        else
            ins(1,1,N,b,c);
        }
}

void cit();

int main()
{
    cit();
    solve();
    return 0;
}

void cit()
{
    int a;
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;++i)
        {
        scanf("%d",&a);
        ins(1,1,N,i,a);
        }
}