Pagini recente » Cod sursa (job #2030163) | Cod sursa (job #113465) | Cod sursa (job #2824991) | Cod sursa (job #772532) | Cod sursa (job #2690487)
#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[2 * i], aint[2 * i + 1]);
}
void update(int poz, int val) {
aint[poz += n - 1] = val;
for(poz /= 2; poz; poz /= 2)
aint[poz] = max(aint[2 * poz], aint[2 * poz + 1]);
}
int query(int st, int dr) {
int ans = -1;
for(st += n - 1, dr += n - 1; st <= dr; st /= 2, dr /= 2) {
if(st % 2 == 1)
ans = max(ans, aint[st++]);
if(dr % 2 == 0)
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;
}