Pagini recente » Cod sursa (job #1004431) | Cod sursa (job #88355) | Cod sursa (job #2338024) | Cod sursa (job #2815023) | Cod sursa (job #2076715)
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 100005;
int a[MAX_N];
int buckets[MAX_N];
void UpdateBucket(int bucket, int k, int n) {
int first = (bucket - 1) * k + 1;
int last = min(bucket * k, n);
buckets[bucket] = a[first];
for (int i = first + 1; i <= last; ++ i) {
buckets[bucket] = max(buckets[bucket], a[i]);
}
}
int main() {
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m, k;
cin >> n >> m;
k = max(1, min(n, (int)sqrt(1.0 * n)));
int num_buckets = n / k;
for (int i = 1; i <= n; ++ i) {
cin >> a[i];
}
for (int bucket = 1; bucket <= num_buckets; ++ bucket) {
UpdateBucket(bucket, k, n);
}
for (int i = 1; i <= m; ++ i) {
int type, x, y;
cin >> type >> x >> y;
if (type == 1) {
a[x] = y;
int bucket = (x - 1) / k + 1;
UpdateBucket(bucket, k, n);
} else {
int best = a[x];
while (x % k != 1 && x <= y) {
best = max(best, a[x ++]);
}
while (y % k != 0 && x <= y) {
best = max(best, a[y --]);
}
while (x <= y) {
best = max(best, buckets[(x - 1) / k + 1]);
x += k;
}
cout << best << "\n";
}
}
return 0;
}