Pagini recente » Cod sursa (job #2698615) | Cod sursa (job #2882436) | Cod sursa (job #1114172) | Cod sursa (job #87679) | Cod sursa (job #2570881)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = 1 << 18;
int n, m, z, p, c, a, b, v[N], getMax(int, int, int);
int main()
{
f >> n >> m;
p = 1;
for(; p < n; p*=2);
z = p - 1;
for(int i = 1; i <= n; i++)
f >> v[z + i];
for(int i = z; i >= 1; i--)
v[i] = max(v[i * 2], v[i * 2 + 1]);
for(; m; m--)
{
f >> c >> a >> b;
if(c)
{
v[z + a] = b;
for(int i = (z + a) / 2; i >= 1; i /= 2)
v[i] = max(v[2 * i + 1], v[2 * i]);
continue;
}
g << getMax(1, 1, p) << '\n';
}
return 0;
}
int getMax(int nod, int st, int dr)
{
if(b < st || a > dr)
return 0;
if(st >= a && dr <= b)
return v[nod];
int mi = (st + dr) / 2;
return max(getMax(nod * 2, st, mi), getMax(nod * 2 + 1, mi + 1, dr));
}