Pagini recente » Cod sursa (job #2386304) | Cod sursa (job #156832) | Cod sursa (job #2249782) | Cod sursa (job #3213245) | Cod sursa (job #1875750)
#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);
}
}