Pagini recente » Cod sursa (job #1079407) | Cod sursa (job #1593667) | Cod sursa (job #835607) | Cod sursa (job #1116422) | Cod sursa (job #1968383)
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX=100000;
int n,m,i;
int arb[2*NMAX+5];
void build()
{
for(int i=n-1; i; --i)
arb[i]=max(arb[2*i],arb[2*i+1]);
}
void update(int pos,int val)
{
arb[pos]=val;
for(pos/=2; pos; pos/=2)
arb[pos]=max(arb[2*pos],arb[2*pos+1]);
}
int query(int st,int dr)
{
int sol=-1;
while(st<=dr)
{
if(st%2==1)
sol=max(sol,arb[st++]);
if(dr%2==0)
sol=max(sol,arb[dr--]);
st/=2;
dr/=2;
}
return sol;
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0; i<n; ++i)
scanf("%d",&arb[i+n]);
build();
for(i=1; i<=m; ++i)
{
int op,a,b;
scanf("%d%d%d",&op,&a,&b);
if(op==0)
printf("%d\n",query(a+n-1,b+n-1));
else update(a+n-1,b);
}
return 0;
}