Pagini recente » Cod sursa (job #112917) | Cod sursa (job #97159) | Cod sursa (job #1335346) | Cod sursa (job #910098) | Cod sursa (job #2679081)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m;
cin >> n >> m;
int bucket_size = sqrt(n);
int no_buckets = ceil(1.0 * n / bucket_size);
vector <int> v(n), bucket(no_buckets, 0);
for (int i = 0; i < n; ++i) {
cin >> v[i];
bucket[i / bucket_size] = max(v[i], bucket[i / bucket_size]);
}
while (m--) {
int op, l, r;
cin >> op >> l >> r; --l; --r;
int l_buk = l / bucket_size;
int r_buk = r / bucket_size;
if (op == 0) {
int ans = 0;
if (l_buk == r_buk) {
for (int i = l; i <= r; ++i)
ans = max(ans, v[i]);
}
else {
for (int i = l; i < n and i / bucket_size == l_buk; ++i)
ans = max(ans, v[i]);
for (int i = r; i >= 0 and i / bucket_size == r_buk; --i)
ans = max(ans, v[i]);
for (int i = l_buk + 1; i < r_buk; ++i)
ans = max(ans, bucket[i]);
}
cout << ans << '\n';
}
else {
int val = r + 1;
v[l] = val;
if (val >= bucket[l_buk])
bucket[l_buk] = val;
else {
bucket[l_buk] = val;
for (int i = l_buk * bucket_size; i < n and i / bucket_size == l_buk; ++i)
bucket[l_buk] = max(bucket[l_buk], v[i]);
}
}
}
return 0;
}