Pagini recente » Cod sursa (job #2284393) | Cod sursa (job #634545) | Cod sursa (job #2521573) | Cod sursa (job #1867780) | Cod sursa (job #2690489)
#include <iostream>
#include <cstdio>
using namespace std;
const int NMAX = 100000;
int n, m;
int aint[2 * NMAX + 5];
void build() {
for(int i = n - 1; i; i--)
aint[i] = max(aint[i << 1], aint[(i << 1) + 1]);
}
void update(int poz, int val) {
aint[poz += n - 1] = val;
for(poz >>= 1; poz; poz >>= 1)
aint[poz] = max(aint[poz << 1], aint[(poz << 1) + 1]);
}
int query(int st, int dr) {
int ans = -1;
for(st += n - 1, dr += n - 1; st <= dr; st >>= 1, dr >>= 1) {
if(st & 1)
ans = max(ans, aint[st++]);
if(!(dr & 1))
ans = max(ans, aint[dr--]);
}
return ans;
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 0; i < n; i++)
scanf("%d", &aint[n + i]);
build();
for(int i = 1; i <= m; i++) {
int tip, a, b;
scanf("%d %d %d", &tip, &a, &b);
if(!tip)
printf("%d\n", query(a, b));
else
update(a, b);
}
return 0;
}