Cod sursa(job #967697)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 28 iunie 2013 12:20:45
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 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;
void Update(int nod,int st,int dr,int poz,int x)
{ int mid;
   if (st==dr) A[nod]=x;
   else
   { mid=(st+dr)/2;
      if (poz<=mid) Update(2*nod,st,mid,poz,x);
       else Update(2*nod+1,mid+1,dr,poz,x);
     A[nod]=max(A[2*nod], A[2*nod+1]);
   }
}
void Query(int nod,int st,int dr,int x,int y)
{ int mid;
  if (x<=st && dr<=y)
     mx=max(mx,A[nod]);
  else
   { mid=(st+dr)/2;
      if (x<=mid) Query(2*nod,st,mid,x,y);
      if (y>mid) Query(2*nod+1,mid+1,dr,x,y);
   }
}
int main()
{ int i,el,t,p,v,s,d;
    f>>n>>m;
   for(i=1;i<=n;i++)
   { f>>el;
       Update(1,1,n,i,el);
   }
  // cout<<el<<" "<<m;
   for(i=1;i<=m;i++)
    { f>>t;
       if (t==1) { f>>p>>v; Update(1,1,n,p,v) ;}
       if (t==0) {mx=0; f>>s>>d; Query(1,1,n,s,d); g<<mx<<"\n";}
    }
    return 0;
}