Cod sursa(job #288832)

Utilizator gggbbbyyyDarkMan gggbbbyyy Data 26 martie 2009 09:55:35
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;
int v[450000],val,poz,i,n,maxim,p,u,m,op;
int Maxim(int a,int b)
 { if(a<b) return b;
   return a;
 }
 
void query(int nod,int s,int d)

{
  if(p<=s&&d<=u)
    { if(maxim<v[nod]) maxim=v[nod];
        return;
    }
  int m=(s+d)>>1;

   if(p<=m) query(2*nod,s,m);
   if(m<u)  query(2*nod+1,m+1,d);
}

void update(int nod, int s, int d)
{  
      if (s==d)
     {  
       v[nod] = val;
       return;
     }
        
     int m=(s+d)>>1;

      if(poz<=m) update(2*nod,s,m);
      else       update(2*nod+1,m+1,d);
        
      v[nod]=Maxim(v[2*nod],v[2*nod+1]);
 }

int main()
{
ifstream f("arbint.in");
ofstream g("arbint.out");


f>>n>>m;

for(i=1;i<=n;i++)

 { f>>val; poz=i;

   update(1,1,n);
 }
for(i=1;i<=m;i++)

 { f>>op>>p>>u;

    if(op==0)
     { maxim=-1; query(1,1,n); g<<maxim<<'\n';}

     else { poz=p; val=u; update(1,1,n);}
 }

f.close();
g.close();
return 0;
}