Cod sursa(job #294749)

Utilizator zbarniZajzon Barna zbarni Data 2 aprilie 2009 18:59:08
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<fstream.h>
#define nx 100005
int A[nx*5];
int max,a,b,poz,what;
inline int maxim (int x,int y)
 {
  if (x>y) return x;
  return y;
 }

void update (int nod,int st,int dr)
 {
  if (st==dr)
    A[nod]=what;
  else
   {
    int mij=(st+dr)/2;
    if (poz<=mij)
      update (nod*2,st,mij);
    else
      update (nod*2+1,mij+1,dr);
    A[nod]=maxim (A[nod*2],A[nod*2+1]);
   }
 }

void query (int nod,int st,int dr)
 {
  if (a<=st && dr<=b)
    {
     if (A[nod]>max) max=A[nod];
    }
  else
   {
    int mij=(st+dr)/2;
    if (a<=mij) query (nod*2,st,mij);
    if (b>mij) query (nod*2+1,mij+1,dr);
   }
 }

int main()
 {
  ifstream be ("arbint.in");
  ofstream ki ("arbint.out");
  int n,m;
  be>>n>>m;
  int i,c;
  for (i=1;i<=n;++i)
   {
    be>>what;
    poz=i;
    update(1,1,n);
   }
  for (;m;--m)
   {
    be>>c>>a>>b;
    if (c==0)
     {
      max=-1;
      query(1,1,n);
      ki<<max<<'\n';
     }
    else
     {
      what=b;poz=a;
      update(1,1,n);
     }
   }
  be.close();
  ki.close();
  return 0;
 }