Cod sursa(job #1200701)

Utilizator azkabancont-vechi azkaban Data 23 iunie 2014 13:33:52
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");

void update(long nod,long st, long dr,long poz ,long b,long A[])
     {
       if (st==dr) A[nod]=b;
              else {
                    long mij =(st+dr)/2;
                    if (poz<=mij) update(nod*2,st,mij,poz,b,A);
                             else update(nod*2+1,mij+1,dr,poz,b,A);
                    A[nod]=max(A[2*nod],A[2*nod+1]);    
                    }
     }

void query (long nod,long  st ,long dr ,long poz_st,long poz_dr,long A[],long &maxim)
{
  if (poz_st<=st && poz_dr>=dr) maxim=max(maxim,A[nod]);
        else {
              long mij=(st+dr) /2;
              if (poz_st<=mij) query (2*nod,st,mij,poz_st,poz_dr,A,maxim);
              if (poz_dr>mij)  query (2*nod+1,mij+1,dr,poz_st,poz_dr,A,maxim);
              }
}
long mijl,n,m,i,x,y,sol,A[100009],k,op,a,b,maxim,val;
int main()
{
    
    cin>>n>>m;
    for (i=1 ; i<=n ; i++) { 
                            cin>>val;
                            update(1,1,n,i,val,A);
                            }
    for (i=m;i>=1;--i){
                       cin>>op>>a>>b;
                       if (op==0) {
                                   maxim=0;
                                   query(1,1,n,a,b,A,maxim);
                                   cout<<maxim<<"\n";
                                  }
                              else update(1,1,n,a,b,A);
                      }
return 0 ;
}