Pagini recente » Cod sursa (job #1170640) | Cod sursa (job #1282398) | Cod sursa (job #1193363) | Cod sursa (job #746570) | Cod sursa (job #1902285)
#include<cstdio>
using namespace std;
const int nMax = 100000;
int t[nMax * 2], n, m;
int maxim(int a, int b){
return a > b ? a : b;
}
void build(){
for(int i = n - 1 ; i >= 0 ; --i){
t[i] = maxim(t[i * 2], t[i * 2 + 1]);
}
}
void modify(int p, int val){
for(t[p] = val; p > 1 ; p /= 2) t[p / 2] = maxim(t[p], t[p^1]);
}
int query(int l, int r){
int rasp = t[l];
for(;l <= r; l /= 2, r /= 2){
if(l&1) rasp = maxim(rasp, t[l++]);
if(!(r&1)) rasp = maxim(rasp, t[r--]);
}
return rasp;
}
int main (){
FILE *in = fopen("arbint.in","r");
FILE *out = fopen("arbint.out","w");
fscanf(in,"%d%d", &n, &m);
for(int i = 0 ; i < n ; ++i){
fscanf(in,"%d", t + i + n);
}
build();
int tip, a, b;
for(int i = 0 ; i < m ; ++i){
fscanf(in,"%d%d%d", &tip, &a, &b);
if(tip)
modify(a + n - 1, b);
else
fprintf(out,"%d\n", query(a + n - 1, b + n - 1));
}
}