Cod sursa(job #1183215)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 8 mai 2014 17:28:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <algorithm>
#define N 1<<18
using namespace std;
int a,b,ARB[N],n,m,j,z,i,cod;
int Query(int st,int dr,int nod)
{
    int mij=(st+dr)>>1;
    if(b<st||a>dr)
        return 0;
    if(a<=st&&b>=dr)
        return ARB[nod];
    return max(Query(st,mij,nod*2),Query(mij+1,dr,nod*2+1));
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(z=1;z<n;z<<=1);
    z--;
    for(i=1;i<=n;i++)
        scanf("%d",&ARB[i+z]);
    for(i=z;i>=1;i--)
        ARB[i]=max(ARB[2*i],ARB[2*i+1]);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&cod,&a,&b);
        if(cod)
        {
            a+=z;
            ARB[a]=b;
            for(j=a>>1;j;j>>=1)
                ARB[j]=max(ARB[2*j],ARB[2*j+1]);
        }
        else
            printf("%d\n",Query(1,z,1));
    }
    return 0;
}