Pagini recente » Cod sursa (job #2151078) | Cod sursa (job #803139) | Cod sursa (job #2657388) | Cod sursa (job #1099927) | Cod sursa (job #1145422)
#include <cstdio>
#include <algorithm>
#define N (1<<18)+10
using namespace std;
int n,m,z,i,cod,X,Y,x[N],Query(int,int,int);
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(z=1;;z<<=1)
if(z>=n)
break;
z--;
for(i=1;i<=n;i++)
scanf("%d",&x[z+i]);
for(i=z;i>=1;i--)
x[i]=max(x[2*i],x[2*i+1]);
for(;m;m--)
{
scanf("%d%d%d",&cod,&X,&Y);
if(!cod)
printf("%d\n",Query(1,1,z+1));
else
{
X+=z;
x[X]=Y;
for(X>>=1;X;X>>=1)
x[X]=max(x[2*X],x[2*X+1]);
}
}
return 0;
}
int Query(int nod,int A,int B)
{
if(A>Y||X>B)return 0;
if(X<=A&&B<=Y)return x[nod];
return max(Query(2*nod,A,(A+B)/2),Query(2*nod+1,(A+B)/2+1,B));
}