Pagini recente » Cod sursa (job #943648) | Cod sursa (job #2711253) | Cod sursa (job #524466) | Cod sursa (job #1062892) | Cod sursa (job #1916990)
#include <fstream>
#include <cstdio>
#define NMAX 100001
using namespace std;
ofstream cout("arbint.out");
int n,m,a,b,MAX,i,x,caz;
int arb[4*NMAX+20];
inline void Update(int nod, int s, int d){
int mijl;
if(s==d)
arb[nod]=b;
else{
mijl=(s+d)>>1;
if(a<=mijl)
Update(nod*2,s,mijl);
else
Update(nod*2+1,mijl+1,d);
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
}
inline void query(int nod, int s, int d){
int mijl;
if(a<=s && b>=d){
if(MAX<arb[nod])
MAX=arb[nod];
return;
}
else{ mijl=(s+d)>>1;
if(mijl>=a)
query(2*nod,s,mijl);
if(mijl<b)
query(2*nod+1,mijl+1,d);
}
}
int main()
{
FILE*fin=freopen("arbint.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i){
scanf("%d",&x);
a=i;b=x;
Update(1,1,n);
}
for(i=1;i<=m;++i){
scanf("%d%d%d",&caz,&a,&b);
MAX=0;
if(caz==0){
query(1,1,n);
cout<<MAX<<'\n';
}
else
Update(1,1,n);
}
return 0;
}