Pagini recente » Cod sursa (job #3211042) | Cod sursa (job #831852) | Cod sursa (job #2616735) | Cod sursa (job #1635712) | Cod sursa (job #2209742)
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int N = 2000002;
int n, m, arb[N], c, a, b;
void update(int p, int st, int dr) {
if (st == dr) {
arb[p] = b;
return;
}
int m = (st + dr) / 2;
if (a <= m) update(p << 1, st, m);
else update((p << 1) + 1, m + 1, dr);
arb[p] = max(arb[p << 1], arb[(p << 1) + 1]);
}
int cautare(int p, int st, int dr) {
if (a <= st && dr <= b) return arb[p];
int r = 0, m = (st + dr) / 2;
if (a <= m) r = max(r, cautare(p << 1, st, m));
if (b > m) r = max(r, cautare((p << 1) + 1, m + 1, dr));
return r;
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++) {
in >> b;
a = i;
update(1, 1, n);
}
for (int i = 1; i <= m; i++) {
in >> c >> a >> b;
if (c == 0) out << cautare(1, 1, n) << '\n';
if (c == 1) update(1, 1, n);
}
in.close();
out.close();
}