Pagini recente » cnmnarad | Cod sursa (job #928555) | Cod sursa (job #1595395) | Cod sursa (job #1108852) | Cod sursa (job #2267099)
#include<cstdio>
#include<algorithm>
const int NMAX=100000;
int aint[4*NMAX+10];
int p,a,b,sol;
void update(int p,int st,int dr)
{
int mij=(st+dr)/2;
if(st==dr)
aint[p]=b;
else
{
if(a<=mij)
update(2*p,st,mij);
else
update(2*p+1,mij+1,dr);
aint[p]=std::max(aint[2*p],aint[2*p+1]);
}
}
void query(int p,int st,int dr)
{
int mij=(st+dr)/2;
if(a<=st && dr<=b)
sol=std::max(sol,aint[p]);
else
{
if(a<=mij)
query(2*p,st,mij);
if(mij<b)
query(2*p+1,mij+1,dr);
}
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
int n,m;
scanf("%d %d ",&n,&m);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d ",&x);
b=x;
a=i;
update(1,1,n);
}
for(int i=1;i<=m;i++)
{
scanf("%d %d %d ",&p,&a,&b);
if(p==1)
update(1,1,n);
else
{
sol=0;
query(1,1,n);
printf("%d\n",sol);
}
}
return 0;
}