Pagini recente » Cod sursa (job #2966625) | Cod sursa (job #2618356) | Cod sursa (job #1013006) | Monitorul de evaluare | Cod sursa (job #2986739)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = 1e5 + 1;
int n, m, c, x, y, p, a[4 * N];
void init(), update(int, int);
int getmax(int, int, int);
int main()
{
init();
for (; m; m--){
f >> c >> x >> y;
if (c) update(x, y);
else g << getmax(1, 1, p + 1) << '\n';
}
return 0;
}
void init(){
f >> n >> m;
p = 1; while (p < n) p *= 2; p--;
for (int i = 1; i <= n; i++) f >> a[i + p];
for (int i = p; i; i--)
a[i] = max(a[2 * i], a[2 * i + 1]);
}
void update(int poz, int val){
poz += p; a[poz] = val; poz /= 2;
while (poz){
a[poz] = max(a[poz * 2], a[poz * 2 + 1]);
poz /= 2;
}
}
int getmax(int nod, int l, int r){
if (y < l || x > r) return 0;
if (x <= l && r <= y) return a[nod];
int mi = (l + r) / 2;
return max(getmax(2 * nod, l, mi), getmax(2 * nod + 1, mi + 1, r));
}