Pagini recente » Cod sursa (job #39736) | Istoria paginii runda/pregatire_clasele_9-10/clasament | Cod sursa (job #261029) | Cod sursa (job #1384450) | Cod sursa (job #1749706)
#include <cstdio>
using namespace std;
const int N = 1e5 + 5;
int aib[2*N], n;
inline int max(int a, int b){
return a > b ? a : b;
}
void build(){
int i;
for(i = n-1;i >= 1;i--){
aib[i] = max(aib[i<<1], aib[(i<<1)+1]);
}
}
void change(int p, int x){
p += n-1;
aib[p] = x;
int i;
for(i = p>>1;i >= 1;i >>= 1){
aib[i] = max(aib[i<<1], aib[(i<<1)+1]);
}
}
int query(int l, int r){
l += n-1;
r += n-1;
int ret = -1;
for(;l <= r;l >>= 1, r >>= 1){
if(l&1){
ret = max(ret, aib[l]);
l++;
}
if((r&1) == 0){
ret = max(ret, aib[r]);
r--;
}
}
return ret;
}
int main(){
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int i,j,m,op,p,x;
scanf("%d %d", &n, &m);
for(i = 0;i < n;i++){
scanf("%d", &aib[i+n]);
}
build();
for(i = 1;i <= m;i++){
scanf("%d %d %d", &op, &p, &x);
if(op == 0){
printf("%d\n", query(p, x));
}else{
change(p, x);
}
}
return 0;
}