Pagini recente » Cod sursa (job #290048) | Cod sursa (job #233434) | Cod sursa (job #2243869) | Cod sursa (job #1173887) | Cod sursa (job #1844018)
//batog
#include <iostream>
#include <fstream>
#include <math.h>
#include <stdio.h>
using namespace std;
#define MAX 100010
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 < N; 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 {
int i, j;
//i < inceputul segmentului urmator
for (i = a + 1; i < a / rad * rad + rad && i <= b; i++) {
printf("i=%d\n", i);
if (v[i] > maxim) {
maxim = v[i];
}
}
//
for (j = i / rad; j < (b + 1) / rad && j < rad; j++) {
printf("j=%d\n", j);
if (batog[j] > maxim) {
maxim = batog[j];
}
}
for (i = j * rad; i <= b; i++) {
printf("i=%d\n", i);
if (v[i] > maxim) {
maxim = v[i];
}
}
}
fout << maxim << "\n";
} else {
a--;
v[a] = b;
if (v[a] > batog[a / rad]) {
batog[a / rad] = v[a];
}
}
}
fin.close();
fout.close();
return 0;
}