Cod sursa(job #1023020)

Utilizator Stefanescu_MihaiStefanescu Mihai-Nicolae Stefanescu_Mihai Data 6 noiembrie 2013 12:20:25
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
using namespace std;
int arb[1000000];
int maxim(int a,int b)
{
    if (a>b)
        return a;
    return b;
}
int var1,var2,maxint;
void update(int nod, int left, int right)
{
    if (left==right)
        arb[nod]=var2;
    else
    {
        int mid=left+(right-left)/2;
        if (var1<=mid)
            update(nod*2,left,mid);
        else
            update(nod*2+1,mid+1,right);
        arb[nod]=maxim(arb[nod*2],arb[nod*2+1]);
    }
}
void ask(int nod,int left,int right)
{
    if ((left>=var1)&&(right<=var2))
    {
        if (arb[nod]>maxint)
            maxint=arb[nod];
    }
    else
    {
        int mid=left+(right-left)/2;
        if (mid>=var1)
            ask(nod*2,left,mid);
        if (mid<var2)
            ask(nod*2+1,mid+1,right);
    }
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    int n,m,i,c;
    scanf("%d %d\n",&n,&m);
    for (var1=1;var1<n;++var1)
    {
        scanf("%d ",&var2);
        update(1,1,n);
    }
    scanf("%d\n",&var2);
        update(1,1,n);
    for (i=0;i<m;++i)
    {
        scanf("%d %d %d\n",&c,&var1,&var2);
        if (c)
            update(1,1,n);
        else
        {
            maxint=-1;
            ask(1,1,n);
            printf("%d\n",maxint);
        }
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}