Pagini recente » Cod sursa (job #2294873) | Cod sursa (job #2191722) | Cod sursa (job #1992627) | Cod sursa (job #1449363) | Cod sursa (job #2404701)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N_MAX = 100000;
int N, M;
int X, Pos, Maxim, A, B;
int Arb[4 * N_MAX];
int v[4 * N_MAX];
void query(int nod, int st, int dr) {
if (A <= st && dr <= B) {
Maxim = max(Maxim, Arb[nod]);
return;
}
int mid = (st + dr) / 2;
if (A <= mid)
query(2 * nod, st, mid);
if (mid < B)
query(2 * nod + 1, mid + 1, dr);
}
void update(int nod, int st, int dr) {
if (st == dr) {
Arb[nod] = X;
return;
}
int mid = (st + dr) / 2;
if (Pos <= mid)
update(2 * nod, st, mid);
else
update(2 * nod + 1, mid + 1, dr);
Arb[nod] = max(Arb[2 * nod], Arb[2 * nod + 1]);
}
void build(int nod, int st, int dr) {
if(st == dr) {
Arb[nod] = v[st];
return;
}
int mid = (st + dr) / 2;
build(2 * nod, st, mid);
build(2 * nod + 1, mid + 1, dr);
Arb[nod] = max(Arb[2 * nod], Arb[2 * nod + 1]);
}
int main() {
in >> N >> M;
for(int i = 0; i < N; ++i)
in >> v[i];
build(1, 0, N - 1);
bool op;
for(int i = 0; i < M; ++i) {
in >> op >> A >> B;
--A;
if(op == 0) {
--B;
Maxim = -1;
query(1, 0, N - 1);
out << Maxim << '\n';
} else if(op == 1) {
X = B, Pos = A;
update(1, 0, N - 1);
}
}
return 0;
}