Pagini recente » Cod sursa (job #1572193) | Cod sursa (job #1895537) | Cod sursa (job #2070177) | Cod sursa (job #534689) | Cod sursa (job #2313257)
#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[2 * N_MAX];
void query(int nod, int left, int right) {
if(nod >= 2 * N)
return;
if (A <= left && right <= B) {
Maxim = max(Maxim, Arb[nod]);
return;
}
int mid = (left + right) / 2;
if (A <= mid)
query(2 * nod, left, mid);
if (mid < B)
query(2 * nod + 1, mid + 1, right);
}
void update(int nod, int left, int right) {
if(nod >= 2 * N)
return;
if (left == right) {
Arb[nod] = X;
return;
}
int mid = (left + right) / 2;
if (Pos <= mid)
update(2 * nod, left, mid);
else
update(2 * nod + 1, mid + 1, right);
if(nod < N)
Arb[nod] = max(Arb[2 * nod], Arb[2 * nod + 1]);
}
int main() {
in >> N >> M;
for(int i = 0; i < N; ++i) {
in >> X;
Pos = i;
update(1, 0, N - 1);
}
bool op;
for(int i = 0; i < M; ++i) {
in >> op >> A >> B;
if(op == 0) {
--A, --B;
Maxim = -1;
query(1, 0, N - 1);
out << Maxim << '\n';
}
if(op == 1) {
--A;
X = B, Pos = A;
update(1, 0, N - 1);
}
}
return 0;
}