Pagini recente » Cod sursa (job #94172) | Cod sursa (job #1417219) | Cod sursa (job #463894) | Cod sursa (job #325616) | Cod sursa (job #2466237)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m, arb[4*100001+66], Pos, Val, start, finish, maxim;
void Query(int node, int left, int right) {
if (start <= left && right <= finish) {
if (maxim < arb[node]) maxim = arb[node];
return;
}
int half = (left + right) / 2;
if (start <= half) Query(2 * node, left, half);
if (half < finish) Query(2 * node + 1, half + 1, right);
}
void Update(int node, int left, int right) {
if(left == right) {
arb[node] = Val;
return;
}
int half = (left + right) / 2;
if (Pos <= half) Update(2 * node, left, half);
else Update(2 * node + 1, half + 1, right);
arb[node] = max(arb[2 * node], arb[2 * node + 1]);
}
void init() {
int X, A, B;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> X;
Pos = i, Val = X;
Update(1, 1, n);
}
for (int i = 1; i <= m; i++) {
cin >> X >> A >> B;
if (!X) {
maxim = 0;
start = A, finish = B;
Query(1, 1, n);
cout << maxim << '\n';
} else {
Pos = A, Val = B;
Update(1, 1, n);
}
}
}
int main() {
init();
cin.close();
cout.close();
return 0;
}