Cod sursa(job #1875750)

Utilizator BlueCodeMihalache Catalin Alexandru BlueCode Data 11 februarie 2017 15:23:19
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#define  Max 100001
using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,arb[2*Max],t,a,b;
inline int maxi(int a,int b)
{  if(a>b) return a;
    else return b;
}

inline void build()
{
  for (int i=n-1;i;--i)
 arb[i]=maxi(arb[2*i],arb[2*i+1]);
}
inline void modify(int p, int val)
{ int tmp;
  p+=n-1;
  arb[p]=val;
 while (p > 1)
    {tmp=p/2;
    arb[tmp]=maxi(arb[p],arb[p^1]);
     p=tmp;
    }
}
inline int query(int st, int dr)
{
int rez=0;
st+=n-1;
dr+=n-1;
    while(st<=dr)
  {rez=maxi(rez,maxi(arb[st],arb[dr]));
        st=(st+1)>>1;
        dr=(dr-1)>>1;
  }
  return rez;
}
int main()
{
  f>>n>>m;
  for(int i=0;i<n;++i)
  f>>arb[n+i];
  build();
   for(int i=1;i<=m;i++)
  {f>>t>>a>>b;
    if(t==0) g<<query(a,b)<<'\n';
    else modify(a,b);
  }


}