Pagini recente » Cod sursa (job #966546) | Cod sursa (job #1262764) | Cod sursa (job #1134661) | Razvy | Cod sursa (job #1142907)
#include <iostream>
#include <fstream>
using namespace std;
#define MAXN 100005
ifstream f("arbint.in");
ofstream g("arbint.out");
int n;
int aint[2 * MAXN];
void update(int poz, int val, int st = 1, int dr = n, int nod = 1)
{
if (st == dr) {
aint[nod] = val;
return ;
}
int mij = ((st + dr) >> 1);
if (poz <= mij) {
update(poz, val, st, mij, nod << 1);
} else {
update(poz, val, mij + 1, dr, (nod << 1) + 1);
}
aint[nod] = max(aint[nod << 1], aint[(nod << 1) + 1]);
}
int query(int x, int y, int st = 1, int dr = n, int nod = 1)
{
if (x <= st && dr <= y) {
return aint[nod];
}
int mx = 0;
int mij = ((st + dr) >> 1);
if (x <= mij) {
mx = max(mx, query(x, y, st, mij, nod << 1));
}
if (y > mij) {
mx = max(mx, query(x, y, mij + 1, dr, (nod << 1) + 1));
}
return mx;
}
int main()
{
int m;
f >> n >> m;
int sz = 1;
while (sz < n) sz <<= 1;
for (int i = 1, x; i <= n; i++) {
f >> x;
update(i, x);
}
for (int i = 1, op, x, y; i <= m; i++) {
f >> op >> x >> y;
switch (op) {
case 0: g << query(x, y) << '\n'; break;
case 1: update(x, y); break;
}
}
f.close();
g.close();
return 0;
}