Pagini recente » Cod sursa (job #251672) | Cod sursa (job #320042) | Cod sursa (job #2637841) | Cod sursa (job #1767910) | Cod sursa (job #1778660)
#include <fstream>
#include <algorithm>
using namespace std;
const int N = 1e5;
int n;
int t[2 * N];
void build() {
for (int i = n - 1; i > 0; -- i)
t[i] = max(t[i << 1], t[i << 1 | 1]);
}
void update(int p, int value) {
for (t[p += n] = value; p > 1; p >>= 1)
t[p>>1] = max(t[p], t[p^1]);
}
int query(int l, int r) {
int res = 0;
for (l += n, r += n; l < r; l >>= 1, r >>= 1) {
if (l & 1)
res = max(res, t[l ++ ]);
if (r & 1)
res = max(res, t[-- r]);
}
return res;
}
int main()
{
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int m = 0;
cin >> n >> m;
for (int i = 0; i < n; ++ i)
cin >> t[n + i];
build();
bool type;
int a, b;
while (m --) {
cin >> type >> a >> b;
if (!type)
cout << query(a - 1, b) << '\n';
else
update(a - 1, b);
}
cin.close();
cout.close();
return 0;
}