Cod sursa(job #1051702)

Utilizator vlad008Stan Vladut Angel vlad008 Data 10 decembrie 2013 14:10:49
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<cstdio>
using namespace std;
int n,x,y,t,op,k,ss,dd;
int arb[4*100020];

void push(int nod, int s, int d)
{
    if( s==d ) 
    {
        arb[nod]=ss;
        return ;
    }
    int m=(s+d)/2;
    if(dd <= m) push(2*nod, s ,m);
      else push(2*nod+1,m+1,d);
    arb[nod]=(arb[2*nod] < arb[2*nod+1]) ? arb[2*nod+1]: arb[2*nod];
}
void maxi(int nod, int s, int d)
{
    if( dd <= s && d<=ss)
    {
        k = (arb[nod] > k) ? arb[nod] : k ;
        return ;
    }
    int m=(s+d)/2;
    if(dd<=m) maxi(2*nod, s ,m);
    if(m<ss) maxi(2*nod+1, m+1, d);
}

int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%d%d",&n,&t);
    for(dd=1;dd<=n;dd++)
    {
        scanf("%d",&ss);
        push(1,1,n);
    }
    for(int i=1;i<=t;i++)
    {
        scanf("%d%d%d",&op,&dd,&ss);
        if(op)
        {
            push(1,1,n);
        }
        else
        {
            k = 0;
            maxi(1,1,n);
            printf("%d\n",k);
        }
    }
    return 0;
}