Pagini recente » Cod sursa (job #300696) | Cod sursa (job #1349378) | Cod sursa (job #3270310) | Cod sursa (job #2939398) | Cod sursa (job #1755070)
#include <iostream>
#include <vector>
using namespace std;
struct ST {
int n;
vector<int> t;
ST(const vector<int>& a) {
n = a.size();
t.resize(n*2);
for (int i = 0; i < n; i++) {
t[n+i] = a[i];
}
for (int i = n-1; i >= 1; i--) {
t[i] = max(t[i*2], t[i*2+1]);
}
}
};
void update(int i, int v, ST& st) {
i += st.n;
while (st.t[i] != v && i >= 1) {
st.t[i] = v;
v = max(st.t[i], st.t[i^1]);
i /= 2;
}
}
int getMax(int l, int u, const ST& st) {
l += st.n;
u += st.n;
int ret = 0;
while (l < u) {
if (l & 1) ret = max(ret, st.t[l++]);
if (u & 1) ret = max(st.t[--u], ret);
l /= 2;
u /= 2;
}
return ret;
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
ST st(a);
for (int i = 0; i < m; i++) {
int op;
cin >> op;
if (op == 0) {
int l, u;
cin >> l >> u;
l--;
printf("%d\n", getMax(l, u, st));
}
else {
int i, v;
cin >> i >> v;
i--;
update(i, v, st);
}
}
return 0;
}