Pagini recente » Cod sursa (job #1226545) | Monitorul de evaluare | Istoria paginii utilizator/balescu_ovidiu | Profil veleandu | Cod sursa (job #3183492)
#include <fstream>
using namespace std;
constexpr int maxn = 1 << 17;
namespace {
template <int niv>
int buf[niv];
template <int niv = maxn>
void build() {
if constexpr (niv > 1) {
for (int i = 0; i < niv; i += 2)
buf<niv / 2>[i / 2] = max(buf<niv>[i], buf<niv>[i + 1]);
build<niv / 2>();
}
}
template <int niv>
void rebuild(int i) {
if constexpr (niv > 1) {
buf<niv / 2>[i / 2] = max(buf<niv>[i], buf<niv>[i ^ 1]);
rebuild<niv / 2>(i / 2);
}
}
void update(int i, int x) {
buf<maxn>[i] = x;
rebuild<maxn>(i);
}
template <int niv = maxn>
int query(int st, int dr, int r = 0) {
if constexpr (niv >= 1) {
if (st == dr) return r;
if (st % 2) r = max(r, buf<niv>[st++]);
if (dr % 2) r = max(r, buf<niv>[--dr]);
return query<niv / 2>(st / 2, dr / 2, r);
}
return 0;
}
}; // namespace
int main() {
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, q;
f >> n >> q;
for (int i = 0; i < n; ++i) f >> buf<maxn>[i];
build();
for (int t, a, b; q--;) {
f >> t >> a >> b;
if (t == 1)
update(a - 1, b);
else
g << query(a - 1, b) << '\n';
}
}