Cod sursa(job #434275)

Utilizator za_wolfpalianos cristian za_wolf Data 5 aprilie 2010 15:58:54
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<stdio.h>
#define NMAX 100010
int q,c,m1,m2,w,x[NMAX],a[NMAX*5+1],rez,i,j,n,m,k,l,b,s,t;
inline int max(int a,int b)
{
 	if (a>b)
      	return a;
   	return b;
}

void modify(int k,int s,int t)
{
 	if (s==t)
    {
    	a[k]=c;
        return ;
    }
	int q=(s+t)/2;
	if (b<=q)
      	modify(2*k,s,q);
 	if (c>q)   
     	modify(2*k+1,q+1,t);
   	a[k]=max(a[2*k],a[2*k+1]);
}

void query(int k,int s,int t)
{
    if (s>=b&&t<=c)
    {
        if (rez<a[k])
	        rez=a[k];
      	return;
  	}
	int q=(s+t)/2;
    if (b<=q)
      	query(2*k,s,q);
	if (c>q)
      	query(2*k+1,q+1,t);
}

int main()
{
 	freopen("arbint.in","r",stdin);
 	freopen("arbint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++)
    {
       	scanf("%d",&x[i]);
        b=i;
        c=x[i];
        modify(1,1,n);
    }

    for (i=1;i<=m;i++)
    {
     	scanf("%d%d%d",&w,&b,&c);
        if (w==1)
          	modify(1,1,n);
        else
        {
         	rez=-1;
        	query(1,1,n);
            printf("%d\n",rez);
        }
    }

    return 0;
}