Cod sursa(job #221620)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 17 noiembrie 2008 00:05:31
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
using namespace::std;
ifstream in("arbint.in");
ofstream out("arbint.out");
long val,pos,n,m,arb[100001],x,a,b,maxim,start,sf;
int max(int a,int b)
{if(a>b) return a;
 return b;
    }
void update(int nod,int left,int right)
{if(left==right)
 {arb[nod]=val;return;}
int div=(left+right)/2;
 if(pos<=div) update(2*nod,left,div);
  else update(2*nod+1,div+1,right);
  arb[nod]=max(arb[2*nod],arb[2*nod+1]);   
     }    
void query(int nod,int left,int right)
{if(start<=left && right<=sf)
{if(maxim<arb[nod])maxim=arb[nod];return;}
int div=(left+right)/2;
if(start<=div) query(2*nod,left,div);
if(div<sf) query(2*nod+1,div+1,right);

}

int main()
{in>>n>>m;
for(int i=1;i<=n;i++)
{in>>val;pos=i;
update(1,1,n);}
for(;m;m--)
{in>>x>>a>>b;
if(x==0){maxim=-1;start=a;sf=b;query(1,1,n);out<<maxim<<'\n';}
else{pos=a;val=b;update(1,1,n);}}
 return 0;   
    
    }