Pagini recente » Cod sursa (job #2586314) | Cod sursa (job #2643826) | Cod sursa (job #2605025) | Cod sursa (job #90938) | Cod sursa (job #1841304)
//batog
#include <iostream>
#include <fstream>
#include <math.h>
#include <stdio.h>
using namespace std;
#define MAX 100000
int main()
{
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int N, M, v[MAX], batog[500], op, a, b, rad;
fin >> N >> M;
rad = ceil(sqrt(N));
for (int i = 0; i < N; i++) {
fin >> v[i];
}
for (int i = 0; i < rad && i * rad < N; i++) {
batog[i] = v[rad * i];
for (int j = rad * i + 1; j < rad * (i + 1); j++) {
if (v[j] > batog[i]) {
batog[i] = v[j];
}
}
}
for (int i = 0; i < M; i++) {
fin >> op >> a >> b;
if (op == 0) {
a--;
b--;
int maxim = v[a];
if (a / rad == b / rad) {
for (int i = a + 1; i <= b; i++) {
if (v[i] > maxim) {
maxim = v[i];
}
}
} else {
for (int i = a + 1; i < a / rad * rad + rad; i++) {
if (v[i] > maxim) {
maxim = v[i];
}
}
for (int i = (a - 1) / rad + 1; i < (b + 1) / rad; i++) {
if (batog[i] > maxim) {
maxim = batog[i];
}
}
for (int i = b / rad * rad; i <= b; i++) {
if (v[i] > maxim) {
maxim = v[i];
}
}
}
fout << maxim << endl;
} else {
a--;
v[a] = b;
if (v[a] > batog[a / rad]) {
batog[a / rad] = v[a];
}
}
}
fin.close();
fout.close();
return 0;
}