Pagini recente » Cod sursa (job #1430755) | Cod sursa (job #3292041) | Cod sursa (job #2743689) | Cod sursa (job #2302484) | Cod sursa (job #2061456)
#include <cstdio>
#include <algorithm>
using namespace std;
int arbint[400005];
int update(int nod) {
if(nod > 0) {
arbint[nod] = max(arbint[2 * nod], arbint[2 * nod + 1]);
update(nod / 2);
}
}
int querry(int st, int dr) {
int rasp = 0;
if(st == dr) {
rasp = arbint[st];
} else if(st < dr) {
if(st % 2 == 1) {
rasp = max(rasp, arbint[st]);
++ st;
}
if(dr % 2 == 0) {
rasp = max(rasp, arbint[dr]);
-- dr;
}
rasp = max(rasp, querry(st / 2, dr / 2));
}
return rasp;
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int n, m, ni = 1;
scanf("%d%d", &n, &m);
while(ni < n) {
ni <<= 1;
}
-- ni;
for(int i = 1; i <= n; ++ i) {
int x;
scanf("%d", &x);
arbint[ni + i] = x;
update((ni + i) / 2);
}
for(int i = 1; i <= m; ++ i) {
int t, a, b;
scanf("%d%d%d", &t, &a, &b);
if(t == 1) {
arbint[ni + a] = b;
update((ni + a) / 2);
} else {
printf("%d\n", querry(ni + a, ni + b));
}
}
return 0;
}