Cod sursa(job #303249)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 9 aprilie 2009 17:58:23
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<fstream.h>
#include<stdlib.h>
int N,M,a,b,A[250001],i=1,x,mx;
inline int max(int x,int y)
{return x>y?x:y;}
void act(int n,int st,int dr,int i,int x)
{if(st==dr)
  A[n]=x;
 else
 {int m=(st+dr)/2;
  if(i<=m)act(2*n,st,m,i,x);
  else    act(2*n+1,m+1,dr,i,x);
  A[n]=max(A[2*n],A[2*n+1]);
 }
}
void in(int n,int st,int dr)
{if(a<=st&&dr<=b)
 {if(mx<A[n])mx=A[n];}
 else
 {int m=(st+dr)/2;
  if(a<=m) in(2*n,st,m);
  if(b>m)  in(2*n+1,m+1,dr);}
}
int main()
{ifstream f("arbint.in");
ofstream g("arbint.out");
f>>N>>M;
for(;i<=N;++i)
{f>>x;
 act(1,1,N,i,x);}
for(i=1;i<=M;++i)
{f>>x>>a>>b;
 if(!x)
 {mx=-1;
  in(1,1,N);
  g<<mx<<'\n';}
 else
  act(1,1,N,a,b);
}
}