Cod sursa(job #405265)

Utilizator bora_marianBora marian bora_marian Data 27 februarie 2010 20:28:38
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<fstream>
using namespace std;
int v[200003],m,n,poz,x;
int a,b,maxim;
void cauta(int nod,int st,int dr);
void update(int nod,int st,int dr);
int main()
{
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");
    fin>>n>>m;
    int i;
    for(i=1;i<=n;i++)
    {
      poz=i;
      fin>>x;
      update(1,1,n);
     }
    for(i=1;i<=m;i++)
    {
      int k;
      fin>>k>>a>>b;
      if(k==0)
      {
         maxim=-1;
         cauta(1,1,n);
         fout<<maxim<<endl;
      }
      else
       poz=a,x=b,update(1,1,n);
    }
 return 0;
}
void update(int nod,int st,int dr)
{
   if(st==dr)
   { 
     v[nod]=x;
     return;}
   else
    {
      int mij=(st+dr)/2;
      if(poz<=mij)
        update(2*nod,st,mij);
      else
        update(2*nod+1,mij+1,dr);
      if(v[2*nod]>v[2*nod+1])
         v[nod]=v[2*nod];
      else
         v[nod]=v[2*nod+1];
      }
}
void cauta(int nod,int st,int dr)
{
     if(a<=st && b>=dr)
      { 
       if(maxim<v[nod])
          maxim=v[nod];
        return;
        }
     else
     {
         int mij=(st+dr)/2;
         if(a<=mij)
           cauta(2*nod,st,mij);
         if(b>mij)
           cauta(2*nod+1,mij+1,dr);
      }
}