Cod sursa(job #1601095)

Utilizator RadduFMI Dinu Radu Raddu Data 15 februarie 2016 18:44:35
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
 int a[400069],n,m,ans,x,y;

 void Update(int nod,int st,int dr)
 {
   if (st==dr) a[nod]=y;
   else
   { int mid=(st+dr)/2;

     if (x<=mid)
       Update(2*nod,st,mid);
      else Update(2*nod+1,mid+1,dr);
      a[nod]=max(a[2*nod],a[2*nod+1]);
   }
 }

 void Query(int nod,int st,int dr)
 {
    if (x<=st && dr<=y) ans=max(ans,a[nod]);
    else
    { int mid=(st+dr)/2;

      if (x<=mid) Query(2*nod,st,mid);
      if (y>mid) Query(2*nod+1,mid+1,dr);
    }
 }

int main()
{ int i,t;

  f>>n>>m;
  for(i=1;i<=n;i++)
   { f>>y; x=i;
     Update(1,1,n);
   }

  for(i=1;i<=m;i++)
  { f>>t>>x>>y;
     if (!t) {ans=0; Query(1,1,n); g<<ans<<"\n";}
      else Update(1,1,n);
  }

    return 0;
}