Pagini recente » Cod sursa (job #2648808) | Cod sursa (job #1808780) | Cod sursa (job #1724372) | Cod sursa (job #631663) | Cod sursa (job #1631432)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int Nmax = 100555;
int A[4*Nmax];
int N, M;
int first, last, pos, val, mx, x, a, b;
int max(int x, int y) { return x > y ? x : y; }
void update(int nod, int l, int r);
void query(int nod, int l, int r);
int main() {
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
fin >> N >> M;
for(int i = 1; i <= N; ++i) {
fin >> x;
pos = i; val = x;
update(1, 1, N);
}
while(M--) {
fin >> x >> a >> b;
if (x == 0) {
first = a, last = b, mx = -1;
query(1, 1, N);
fout << mx << '\n';
} else if (x == 1) {
pos = a, val = b;
update(1, 1, N);
}
}
return 0;
}
void update(int nod, int l, int r) {
if (l == r) { // l == r == pos
A[nod] = val;
return;
}
int m = (l + r)/2;
if (pos <= m) update(2*nod, l, m);
else if (pos > m) update(2*nod + 1, m+1, r);
A[nod] = max(A[2*nod], A[2*nod+1]);
}
void query(int nod, int l, int r) {
if (first <= l && r <= last) {
mx = max(mx, A[nod]);
return;
}
int m = (l + r)/2;
if (first <= m) query(2*nod, l, m);
if (last > m) query(2*nod+1, m+1, r);
}