Pagini recente » Cod sursa (job #1133911) | Cod sursa (job #803875) | Cod sursa (job #2145970) | Cod sursa (job #49524) | Cod sursa (job #1188338)
#include <cstdio>
#include <algorithm>
#define N 300000
using namespace std;
int v[N],n,q,zero,M,i,tip,a,b,max_val(int,int,int);
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
//1-2^k-1 noduri interne (2^k-1 = zero )
//zero+1 - zero+n pozitiile in care memoram val din sir
scanf("%d%d",&n,&q);
for(zero=1;zero<n;zero<<=1);M=zero;zero--;
for(i=1;i<=n;i++)scanf("%d",&v[zero+i]);
for(i=zero;i>=1;i--)v[i]=max(v[2*i],v[2*i+1]);
for(;q;q--)
{
scanf("%d%d%d",&tip,&a,&b);
if(tip==0)
printf("%d\n",max_val(1,1,M));
else
{
a+=zero;
v[a]=b;
for(a>>=1;a;a>>=1)
v[a]=max(v[2*a],v[2*a+1]);
}
}
return 0;
}
int max_val(int nod,int A,int B)
{
if(a>B||A>b)return 0;
if(a<=A&&B<=b)return v[nod];
int C=(A+B)/2;
return max(max_val(2*nod,A,C),max_val(2*nod+1,C+1,B));
}