Cod sursa(job #411250)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 4 martie 2010 19:48:02
Problema Arbori de intervale Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>

using namespace std;

long v[300001];

void actualizare(int nod,int st,int dr,int poz, long valoare)
{
if(st==dr){v[nod]=valoare; return; }
else
{

int mij=(st+dr)/2;
if(poz<=mij){ actualizare(2*nod,st,mij,poz,valoare); }
else actualizare(2*nod+1,mij+1,dr,poz,valoare);


if(v[2*nod]>v[2*nod+1])v[nod]=v[2*nod];
else v[nod]=v[2*nod+1];


}




}


long interogare(int nod, int st, int dr, int a, int b)
{
 if(a<=st && dr<=b)return v[nod];
 else
 {
int mij=(st+dr)/2;
long fiust=0,fiudr=0;

if(a<=mij)fiust=interogare(2*nod,st,mij,a,b);
if(b>mij)fiudr=interogare(2*nod+1,mij+1,dr,a,b);
if(fiust>fiudr)return fiust;
return fiudr;





 }




}





int n,m;

int main(void)
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);


   cin>>n>>m;

   int i;
   long x;

  for(i=1; i<=n; i++)
 {
    cin>>x;
      actualizare(1,1,n,i,x);


}

int a,b;
long c;

for(i=1; i<=m; i++)
{
 cin>>a>>b>>c;
 if(a==0)cout<<interogare(1,1,n,b,c)<<'\n';
 else actualizare(1,1,n,b,c);


}





    return 0;
}