Cod sursa(job #294731)

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

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<<1,st,mij);
    else
      update (nod<<1+1,mij+1,dr);
    A[nod]=maxim (A[nod<<1],A[nod<<1+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<<1,st,mij);
    if (b>mij) query (nod<<1+1,mij+1,dr);
   }
 }

int main()
 {
  ifstream be ("arbint.in");
  ofstream ki ("arbint.out");
  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;
 }