Pagini recente » Cod sursa (job #3252967) | Cod sursa (job #2958826) | Cod sursa (job #1501159) | Monitorul de evaluare | Cod sursa (job #2206001)
#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;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
void ConstructTree(int l, int r, int p) {
if (l == r) {
arbore[p] = arr[l];
return;
}
int middle = (l + r) / 2;
ConstructTree(l, middle, 2 * p);
ConstructTree(middle + 1, r, 2 * p + 1);
int t1, t2;
t1 = arbore[2 * p];
t2 = arbore[2 * p + 1];
arbore[p] = max(t1, t2);
}
void BuildTree() {
ConstructTree(1, n, 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];
}
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;
BuildTree();
}
}
return 0;
}