Cod sursa(job #1200729)

Utilizator azkabancont-vechi azkaban Data 23 iunie 2014 14:13:34
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m,i,A[500013],op,a,b,maxim,val;

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

void query (int nod,int  st ,int dr ,int poz_st,int poz_dr,int &maxim)
{
  if (poz_st<=st && poz_dr>=dr) maxim=max(maxim,A[nod]);
        else {
              int mij=(st+dr) /2;
              if (poz_st<=mij) query (2*nod,st,mij,poz_st,poz_dr,maxim);
              if (poz_dr>mij)  query (2*nod+1,mij+1,dr,poz_st,poz_dr,maxim);
              }
}

int main()
{
    cin>>n>>m;
    for (i=1;i<=n;++i) { 
                        cin>>val;
                        update(1,1,n,i,val);
                        }
    while (m--){
                 cin>>op>>a>>b;
                 if (op==0) {
                             maxim=0;
                             query(1,1,n,a,b,maxim);
                             cout<<maxim<<"\n";
                             }
                 if (op==1) update(1,1,n,a,b);
               }
return 0 ;
}