Pagini recente » Cod sursa (job #1915609) | Cod sursa (job #1357975) | Cod sursa (job #1140660) | Cod sursa (job #2379032) | Cod sursa (job #2831355)
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int NMAX = 1e5;
int n, m;
int Q_L, Q_R;
int d[2 * NMAX + 5];
int left(int x) { return 2 * x; }
int right(int x) { return 2 * x + 1; }
int dad(int x) { return x / 2; }
int maxi = 0;
int N;
int query(int nod, int st, int dr)
{
int mid;
mid = (st + dr) / 2;
if (st > Q_R || dr < Q_L)
return 0;
if (Q_L <= st && dr <= Q_R)
return d[nod];
return max(query(left(nod), st, mid), query(right(nod), mid + 1, dr));
}
int find_n()
{
int p = 1;
while (p <= n)
p = p * 2;
return p;
}
int main()
{
cin >> n >> m;
N = find_n();
for (int i = 1; i <= n; i++)
cin >> d[N + i - 1];
for (int i = N - 1; i >= 1; i--)
d[i] = max(d[left(i)], d[right(i)]);
for (int i = 1; i <= m; i++)
{
int t, a, b;
cin >> t >> a >> b;
if (t == 1)
{
d[N + a - 1] = b;
a = N + a - 1;
while (a >= 1)
{
a /= 2;
d[a] = max(d[left(a)], d[right(a)]);
}
}
else if (t == 0)
{
maxi = 0;
Q_L = a;
Q_R = b;
cout << query(1, 1, N) << '\n';
}
}
}