Cod sursa(job #2420495)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 12 mai 2019 13:10:52
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
//#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int Max=100005;
int n,m,I[4*Max],val,cautat,maxim,a,b;
void update(int nod,int st,int dr)
{
    if(st==dr)
    {
       I[nod]=val;
       return;
    }
    int mij=(st+dr)/2;
    if(cautat<=mij)
        update(nod*2,st,mij);
    else
        update(nod*2+1,mij+1,dr);
    I[nod]=max(I[nod*2],I[nod*2+1]);

}
void q(int nod,int st,int dr)
{
   if(a<=st && dr<=b)
   {
       if(maxim<I[nod])
        maxim=I[nod];
        return;
   }
   int mij=(st+dr)/2;
   if(a<=mij)
    q(2*nod,st,mij);
    if(b-1>=mij)
    q(2*nod+1,mij+1,dr);

}
int main()
{
   in>>n>>m;
   for(int i=1;i<=n;i++)
   {
       int x; in>>x; val=x; cautat=i;
       update(1,1,n);
   }
   for(int i=1;i<=m;i++)
   {
      int x,y,z; in>>x>>y>>z;
      if(x==0)
      {
          maxim=-1;
          a=y;
          b=z;
          q(1,1,n);
          out<<maxim<<"\n";
      }
      else
      {
         cautat=y;
         val=z;
         update(1,1,n);
      }

   }
    return 0;
}