Cod sursa(job #181905)

Utilizator g3ppyStoian Vlad g3ppy Data 19 aprilie 2008 10:52:13
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#define NM (1<<18)
#define md (l+r>>1)
#define ls (n<<1)
#define rs (n<<1|1)
#define max(a,b) ((a)>(b)?(a):(b))
FILE *f,*g;


long rez,a,b;
long arb[NM];

void query (int n, int l, int r)
{
if (a<=l && r<=b)
{
  rez=max(rez,arb[n]);
  return;
}
if (a<=md)
  query(ls,l,md);
if (md+1<=b)
  query(rs,md+1,r);
}

void update (int n,int l,int r)
{
 if (l==r)
    arb[n]=b;
 else
    {
    if (a<=md)
       update(ls,l,md);
    else
	update(rs,md+1,r);
    arb[n]= max (arb[ls],arb[rs]);

    }


}




int main()
{int x,i; long n,m;
freopen("arbint.in","rt",stdin);
freopen("arbint.out","wt",stdout);

scanf("%ld %ld\n",&n,&m);

for (i=1;i<=n;i++)
    {
    scanf ("%ld",&b);
    a=i; update (1,1,n);

    }


while(m--)
{
    scanf ("%d %ld %ld\n",&x,&a,&b);
    if (x==1) update(1,1,n);
    else
       {
       rez=-1;
       query(1,1,n);
       printf("%ld\n",rez);
       }
    }

return 0;
}