Pagini recente » Cod sursa (job #1407134) | Cod sursa (job #583901) | Cod sursa (job #2714623) | Cod sursa (job #2636499) | Cod sursa (job #269776)
Cod sursa(job #269776)
#include<stdio.h>
void solve(), read(),aloca(),build(),pune(),update(long k);
long max(long i1, long i2),quiz(long k);
long n,m,i,*x,*y,*h,baza=1,nn=1,cod,a,b;
int main()
{ read();
build();
solve();
return 0;
}
void read()
{ freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%ld%ld",&n,&m);
while(baza<n){ baza*=2;nn+=baza;} baza=nn-baza;
aloca();
for(i=1;i<=n;i++) scanf("%ld",&h[baza+i]);
}
void aloca()
{ x=new long[nn+3];
y=new long[nn+3];
h=new long[nn+3];
}
void build()
{ for(i=baza+1;i<=nn;i++)
{ x[i]=i-baza; y[i]=i-baza; }
for(i=baza+n+1;i<=nn;i++) h[i]=0;
for(i=baza;i>=1;i--) { x[i]=x[i*2]; y[i]=y[i*2+1];
h[i]=max(h[i*2],h[i*2+1]);
}
}
void solve()
{ for(;m;m--)
{ scanf("%ld%ld%ld",&cod,&a,&b);
if(cod){ pune(); continue;}
i=quiz(1);
printf("%ld\n",quiz(1));
}
}
long max( long i1, long i2)
{ return (i1>i2)?i1:i2;
}
long quiz(long k)
{ long st=k*2, dr=k*2+1, maxst, maxdr;
if(x[k]>b || y[k]<a) return 0;
if(x[k]>=a && y[k]<=b) return h[k];
maxst=quiz(st); maxdr=quiz(dr);
return max(maxst, maxdr);
}
void pune()
{ h[baza+a]=b;
update(baza+a);
}
void update(long k)
{ if(k==1) return;
long ii=k/2; i=h[ii];
h[ii]=max(h[ii*2],h[ii*2+1]);
if(i!=h[ii]) update(ii);
}