Cod sursa(job #3260516)

Utilizator StefanPopescu2Popescu Stefan StefanPopescu2 Data 2 decembrie 2024 17:23:35
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std; 
ifstream fin("arbint.in");
ofstream fout("arbint.out");
  
 int aint[400005];
 int a, b, maxim= -1;
   // stra[i][j]= al 2^j stramos al lui i
  // v[a]=b
 void update1(int nod, int st, int dr)
 {
   if (st == dr) aint[nod] = b;
   else
   {
     int mij = (st + dr) / 2;
     
     if (a <= mij) update1(2*nod, st, mij);
     else update1(2*nod + 1, mij+ 1, dr);
     
     aint[nod] = max(aint[2*nod], aint[2*nod + 1]);
   }
 }
 
 
 //   v[a].....v[b], maxim=-1
 void query1(int nod, int st, int dr)
 {
   if(a<= st && dr <= b)
       maxim = max(maxim, aint[nod]);
    else
    {
      int mij = (st + dr)/2;
      if(mij>=a) query1(2*nod, st, mij);
      if(b>= mij + 1 ) query1(2*nod + 1, mij +1, dr);
    }
 }
 
 
 
int main()
{  
  int n , m;
  fin >> n >> m;
  for(int i  = 1; i <= n; i++)
  {
    a=i; fin>>b;
    update1(1,1,n);
  }
  int c;
  for(int i = 1; i <= m; i++)
  {
   fin >> c; 
   fin >> a >> b;
   if(c == 1)
   {
     update1(1 , 1 , n);
   }
   else
   {
     maxim = -1;
     query1(1 , 1 , n);
     fout << maxim << endl;
   }
  }
   
  return 0;
}