Pagini recente » Cod sursa (job #1324705) | Cod sursa (job #1093685) | Cod sursa (job #6938) | Cod sursa (job #1857938) | Cod sursa (job #1993555)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
const int n_max = 100005;
int n, newn, p, aint[n_max * 4];
inline void Update(int p, int x) {
int t;
p += newn - 1;
aint[p] = x;
while (p) {
if (p & 1) p--;
t = p >> 1;
aint[t] = max(aint[p], aint[p + 1]);
p = t;
}
}
int Query(int p, int x, int y, int st, int dr) {
if(x == st && y == dr) return aint[p];
int mid = (st + dr) / 2;
if(y <= mid) return Query(2 * p, x, y, st, mid);
if(x > mid) return Query(2 * p + 1, x, y, mid + 1, dr);
return max(Query(2 * p, x, mid, st, mid),
Query(2 * p + 1, mid + 1, y, mid + 1, dr));
}
int main() {
int q, i, t, a, b;
fin >> n >> q;
newn = 1;
while (newn < n) {
newn *= 2;
}
p = newn;
for (i = 1; i <= n; i++) {
fin >> aint[p++];
}
for (i = newn - 1; i; i--) {
aint[i] = max(aint[i * 2], aint[i * 2 + 1]);
}
while (q--) {
fin >> t >> a >> b;
switch (t) {
case 0 :
fout << Query(1, a, b, 1, newn) << "\n";
break;
default :
Update(a, b);
}
}
fin.close();
fout.close();
return 0;
}