Pagini recente » Cod sursa (job #804860) | Cod sursa (job #1741151) | Cod sursa (job #1752133) | Cod sursa (job #1199767) | Cod sursa (job #1183913)
#include<cstdio>
using namespace std;
int aint[300001];
int v[100001];
int maxim;
int x,y;
int max(int a,int b){
if (a>b) return a;
return b;
}
void query(int nod,int st,int dr){
if (x<=st &&y>=dr){
maxim=max(maxim,aint[nod]);
return ;
}
int m;
m=(st+dr)/2;
if (x<=m) query(nod*2,st,m);
if (y>m) query(nod*2+1,m+1,dr);
}
void update(int a){
if (a==0) return ;
aint[a]=max(aint[a*2],aint[a*2+1]);
update(a/2);
}
void citire(int a,int st,int dr){
int m;
if (st==dr){
scanf ("%d",&aint[a]);
v[x]=a;
x++;
return ;
}
m=(st+dr)/2;
citire(a*2,st,m);
citire(a*2+1,m+1,dr);
aint[a]=max(aint[a*2],aint[a*2+1]);
}
int main(){
freopen ("arbint.in","r",stdin);
freopen ("arbint.out","w",stdout);
int n,m,i,p;
scanf ("%d%d",&n,&m);
x=1;
citire(1,1,n);
for(i=1;i<=m;i++){
scanf ("%d%d%d",&p,&x,&y);
if (p==0){
maxim=aint[v[x]];
query(1,1,n);
printf ("%d\n",maxim);
}
else {
aint[v[x]]=y;
update(v[x]/2);
}
}
return 0;
}