Cod sursa(job #380304)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 5 ianuarie 2010 17:32:39
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<iostream.h>
inline int max(int a,int b)
{if(a>b)
 return a;
 else
 return b;}
inline int query(int nod,int st,int dr,int left,int right)
  { return max(query(nod/2,(st+dr)/2,dr,left,right),query(nod/2+1,(st+dr/2)+1,dr,left,right));
   if(left<st||right>left)
    return -1;}
int main()
{int v1[100001],j,i,a,b,c,v[100001],m,n;
cin>>m>>n;
for(i=1;i<=n;i++)
  cin>>v[i];
int x=2;
while(n>x)
  x=x*2;
for(i=x;i<=x+n;i++)
  v1[i]=v[i];
for(i=x-1;i>=1;i--)
  v1[i]=max(v1[2*i],v1[2*i+1]);
for(i=1;i<=m;i++)
  {cin>>a>>b>>c;
  if(a==1)
  {v1[x+a-1]=b;
  for(j=(x+a-1)/2;j>=1;j=j/2)
    v1[j]=max(v1[j*2],v1[j*2+1])}
  else
  cout<<query(1,2,3,b,c);}
return 0;}