Pagini recente » Cod sursa (job #1898194) | Cod sursa (job #2315313) | Cod sursa (job #3181704) | Cod sursa (job #2255701) | Cod sursa (job #360996)
Cod sursa(job #360996)
#include<stdio.h>
int n,m,B,i,v[300000],O,a,b,c,MAX(int L,int R,int N);
void read(),solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
B=1;for(;B<n;B<<=1);O=B-1;
for(i=O+1;i<=O+n;i++)scanf("%d",&v[i]);
for(i=O+n+1;i<=O+B;i++) v[i]=0;
}
void solve()
{
for(i=O;i>=1;i--)v[i]=v[2*i]>v[2*i+1]?v[2*i]:v[2*i+1];
for(;m;m--)
{
scanf("%d %d %d",&c,&a,&b);
if(c)
{
v[O+a]=b;i=(O+a)/2;
for(;i;i>>=1)
v[i]=v[2*i]>v[2*i+1]?v[2*i]:v[2*i+1];
continue;
}
printf("%d\n",MAX(1,B,1));
}
}
int MAX(int L,int R,int N)
{
int M,M1,M2;
if(a<=L&&b>=R)return v[N];
if(b<L || R<a) return 0;
M=(L+R)>>1;
M1=MAX(L,M,2*N);
M2=MAX(M+1,R,2*N+1);
return M1>M2?M1:M2;
}