Pagini recente » Cod sursa (job #418561) | Cod sursa (job #566701) | Cod sursa (job #2509320) | Cod sursa (job #3242901) | Cod sursa (job #2757173)
#include <fstream>
using namespace std;
const int P2MAX = (1 << 18);
const int INF = 1 << 30;
int aint[P2MAX], poz, val, a, b;
void update(int p, int st, int dr) {
if (st == dr) {
aint[p] = val;
return;
}
int m = (st + dr) / 2;
if (poz <= m)
update(2 * p, st, m);
else
update(2 * p + 1, m + 1, dr);
aint[p] = max(aint[2 * p], aint[2 * p + 1]);
}
int query(int p, int st, int dr) {
if (st >= a && dr <= b)
return aint[p];
int m = (st + dr) / 2, max_st = -INF, max_dr = -INF;
if (a <= m)
max_st = query(2 * p, st, m);
if (b > m)
max_dr = query(2 * p + 1, m + 1, dr);
return max(max_st, max_dr);
}
int main() {
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, q;
in >> n >> q;
for (poz = 1; poz <= n; ++poz) {
in >> val;
update(1, 1, n);
}
while (q--) {
bool tip;
in >> tip;
if (!tip) {
in >> a >> b;
out << query(1, 1, n) << '\n';
}
else {
in >> poz >> val;
update(1, 1, n);
}
}
in.close();
out.close();
return 0;
}