Pagini recente » Cod sursa (job #2164548) | Cod sursa (job #621069) | Cod sursa (job #957131) | Cod sursa (job #218705) | Cod sursa (job #177669)
Cod sursa(job #177669)
#include<stdio.h>
long a[265150],st[265150],dr[265150],n,m,x,y,z,zero=1,fs,fd,tata,mo,mn;
long query(long p);
int main()
{
long i;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%ld%ld",&n,&m);
while(zero<n)
zero<<=1;
zero--;
for(i=1;i<=n;++i){
st[zero+i]=i;
dr[zero+i]=i;
scanf("%ld",&a[zero+i]);
}
for(i=n+1;i<=zero+1;++i){
st[zero+i]=st[i];
dr[zero+i]=dr[i];
}
for(i=zero;i>=1;--i){
fs=(i<<1);
fd=fs|1;
st[i]=st[fs];
dr[i]=dr[fd];
a[i]=(a[fs]>a[fd])?a[fs]:a[fd];
}
for(i=1;i<=m;++m){
scanf("%ld%ld%ld",&x,&y,&z);
if(x==0)
printf("%ld\n",query(1));
else{
a[zero+y]=z;
tata=(zero+y)>>1;
while(tata){
fs=(tata<<1);
fd=fs|1;
mo=a[tata];
mn=(a[fs]>a[fd])?a[fs]:a[fd];
if(mo==mn)
break;
a[tata]=mn;
tata>>=1;
}
}
}
fcloseall();
return 0;
}
long query(long p)
{
long m1,m2;
if(y>dr[p])
return 0;
if(z<st[p])
return 0;
if(y<=st[p] && z>=dr[p])
return a[p];
m1=query(p<<1);
m2=query((p<<1)|1);
m1=(m1>m2)?m1:m2;
return m1;
}