Pagini recente » Borderou de evaluare (job #3111397) | Cod sursa (job #3332592) | Cod sursa (job #1825283) | Cod sursa (job #1829541) | Cod sursa (job #1834202)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5 + 5;
int n, m;
int aint[NMAX * 2];
int query(int a, int b) {
int ant = -1;
a+= n - 1;
b+= n;
for (; a < b; a/= 2, b/= 2) {
if (a % 2) ant = max(ant, aint[a++]);
if (b % 2) ant = max(ant, aint[--b]); }
return ant; }
void update(int pos, int val) {
pos+= n - 1;
aint[pos] = val;
for (pos/= 2; pos > 0; pos/= 2)
aint[pos] = max(aint[2 * pos], aint[2 * pos + 1]); }
int main(void) {
ifstream fi("arbint.in");
ofstream fo("arbint.out");
int op, a, b;
fi >> n >> m;
for (int i = 1; i <= n; ++i)
fi >> aint[i + n - 1];
for (int i = n - 1; i >= 1; --i)
aint[i] = max(aint[2 * i], aint[2 * i + 1]);
while (m--) {
fi >> op >> a >> b;
switch (op) {
case 0: {
fo << query(a, b) << '\n';
break; }
case 1: {
update(a, b);
break; } } }
return 0; }