Pagini recente » Cod sursa (job #1642911) | Cod sursa (job #2391228) | Cod sursa (job #1652596) | Cod sursa (job #86365) | Cod sursa (job #2206010)
#include <iostream>
#include <fstream>
#define dMAX 100000
#define aMAX (1 << 19)
#define INF (1 << 20)
using namespace std;
int n, m, o, x, y;
int arr[dMAX + 2];
int arbore[aMAX];
int a, b, c;
int ql, qr;
int val, pos;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void ConstructTree(int l, int r, int p) {
if (l == r) {
arbore[p] = val;
return;
}
int middle = (l + r) / 2;
if (pos <= middle) ConstructTree(l, middle, 2 * p);
else ConstructTree(middle + 1, r, 2 * p + 1);
arbore[p] = max(arbore[2 * p], arbore[2 * p + 1]);
}
int MaxRangeQuery(int l, int r, int p) {
/// Total Overlap
if (ql <= l && qr >= r) return arbore[p];
/// No Overlap
if (ql > r || qr < l) return 0;
/// Partial Overlap
int middle = (l + r) / 2;
int t1 = 0, t2 = 0;
if (ql <= middle)
t1 = MaxRangeQuery(l, middle, 2 * p);
if (qr >= middle)
t2 = MaxRangeQuery(middle + 1, r, 2 * p + 1);
return max(t1, t2);
}
int main()
{
int i, j;
fin >> n >> m;
for (i = 1; i <= n; i++) {
fin >> arr[i];
val = arr[i];
pos = i;
ConstructTree(1, n, 1);
}
BuildTree();
for (i = 1; i <= m; i++) {
fin >> a >> b >> c;
if (a == 0) {
ql = b;
qr = c;
fout << MaxRangeQuery(1, n, 1) << '\n';
} else {
arr[b] = c;
val = c;
pos = b;
ConstructTree(1, n, 1);
}
}
return 0;
}