Cod sursa(job #967717)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 28 iunie 2013 12:32:59
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,A[300005],mx=0,i,el,t,p,v,s,d;
void Update(int nod,int st,int dr)
{ int mid;
   if (st==dr) A[nod]=v;
   else
   { mid=(st+dr)/2;
      if (p<=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)
{ int mid;
  if (s<=st && dr<=d)
     mx=max(mx,A[nod]);
  else
   { mid=(st+dr)/2;
      if (s<=mid) Query(2*nod,st,mid);
      if (d>mid) Query(2*nod+1,mid+1,dr);
   }
}
int main()
{
    f>>n>>m;
   for(i=1;i<=n;i++)
   { f>>el;
      p=i; v=el;
       Update(1,1,n);
   }

   for(i=1;i<=m;i++)
    { f>>t;
       if (t==1) { f>>p>>v; Update(1,1,n) ;}
       if (t==0) {mx=0; f>>s>>d; Query(1,1,n); g<<mx<<"\n";}
    }
    return 0;
}