Cod sursa(job #347215)

Utilizator ionutz32Ilie Ionut ionutz32 Data 11 septembrie 2009 14:21:22
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
using namespace std;
int v[400001],n,m,i,c,d,e;
int maxim(int x,int y)
{
    if (x>y)
       return x;
    else
	return y;
}
int intr(int nod,int a,int b)
{
    int mid,max1,max2,db;
    if (d<=a && b<=e)
       return v[nod];
    else
    {
	db=nod*2;
	mid=a+(b-a)/2;
	max1=0;max2=0;
	if (d<=mid)
	   max1=intr(db,a,mid);
	if (e>mid)
	   max2=intr(db+1,mid+1,b);
	return maxim(max1,max2);
    }
}
void update(int nod,int a,int b)
{
     int mid,db;
     if (a==b)
	v[nod]=e;
     else
     {
	 mid=a+(b-a)/2;
	 db=nod*2;
	 if (d<=mid)
	    update(db,a,mid);
	 else
	     update(db+1,mid+1,b);
	 v[nod]=maxim(v[db],v[db+1]);
     }
}
int main()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (d=1;d<=n;++d)
    {
	scanf("%d",&e);
        update(1,1,n);
    }
    ++m;
    while (--m)
    {
          scanf("%d %d %d",&c,&d,&e);
          if (c==0)
	     printf("%d\n",intr(1,1,n));
          else
              update(1,1,n);
    }
    return 0;
}