Pagini recente » Cod sursa (job #405) | Istoria paginii runda/pre_oni_3_star | Cod sursa (job #178246) | Cod sursa (job #1806162) | Cod sursa (job #1142805)
#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;
for (int i = 1; i <= n; i++) {
int x; f >> x;
update(i, x);
}
for (int i = 1; i <= m; i++) {
int op, x, y;
f >> op >> x >> y;
switch (op) {
case 0: g << query(x, y) << '\n'; break;
case 1: update(x, y); break;
}
}
}