Cod sursa(job #1740932)

Utilizator Dan_RadulescuRadulescu Dan Dan_Radulescu Data 12 august 2016 15:33:16
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,v,arb[900001],m,i,poz,val,a,b,maxs=-1;
void creare(int nod,int st,int dr){
     int mij;
      if (st==dr){
         arb[nod]=val;
         return;
      }
      mij=(st+dr)/2;
      if (poz<=mij) creare(2*nod,st,mij);
         else
            creare(2*nod+1,mij+1,dr);
      if (arb[2*nod]>arb[2*nod+1]) arb[nod]=arb[2*nod];
          else
            arb[nod]=arb[2*nod+1];
}
void maxim(int nod,int st,int dr){
    int mij;
     if (a<=st && dr<=b){
        if (maxs<arb[nod]) maxs=arb[nod];
        return;
     }
     mij=(st+dr)/2;
     if (a<=mij) maxim(2*nod,st,mij);
     if (mij<b) maxim(2*nod+1,mij+1,dr);
}
int main(){
   fin>>n>>m;
   for (i=1;i<=n;i++){
      fin>>v;
      poz=i;val=v;
      creare(1,1,n);
   }
   for (i=1;i<=m;i++){
      fin>>v>>a>>b;
      if (v==1){
         poz=a;val=b;
         creare(1,1,n);
      }
        else{
            maxs=-1;
            maxim(1,1,n);
            fout<<maxs<<'\n';
        }
   }
   return 0;
}