Pagini recente » Cod sursa (job #1791681) | Cod sursa (job #242347) | Cod sursa (job #3130072) | Cod sursa (job #746837) | Cod sursa (job #2197283)
#include <bits/stdc++.h>
#define NMax 270006
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int a[NMax];
int n, m;
int Query(int nod, int x, int y, int st, int dr)
{
if(st == x && dr == y)
return a[nod];
int m = (st + dr) / 2;
if(y <= m)
return Query(2 * nod, x, y, st, m);
if(m + 1 <= x)
return Query(2 * nod + 1, x, y, m + 1, dr);
return max(Query(2 * nod, x, m, st, m),Query(2 * nod + 1, m + 1, y, m + 1, dr));
}
inline void Update(int p, int x)
{
p = p + n - 1;
a[p] = x;
while(p > 0)
{
int t = p / 2;
int mx = max(a[2 * t], a[2 * t + 1]);
a[t] = mx;
p = t;
}
}
int main()
{
int x, y, op, j, val, i;
fin >> n >> m;
int N=1;
while(N < n)
N *= 2;
j = N;
for(i = 1; i <= n; i++)
{
fin >> val;
a[j++] = val;
}
n = N;
for(int i = n - 1; i >= 1; i--)
a[i] = max(a[2 * i], a[2 * i + 1]);
for(int i = 1; i <= m; i++)
{
fin >> op >> x >> y;
if(op == 1)
Update(x, y);
else
fout << Query(1, x, y, 1, n) << "\n";
}
return 0;
}