Pagini recente » Cod sursa (job #2365401) | Cod sursa (job #2696568) | Cod sursa (job #1248593) | Cod sursa (job #2445908) | Cod sursa (job #2372910)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int N = 1 << 17;
int n, m, c, x, y, e[18][N];
void update();
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
f >> e[0][i];
for(int i = 1, p = 1, P = 2; P <= n; i++, p <<=1, P <<=1)
for(int st = 1, mi = p + 1, dr = P; dr <= n; st++, mi++, dr++)
e[i][st] = (e[i-1][st]<e[i-1][mi])?e[i-1][mi]:e[i-1][st];
for(; m; m--)
{
f >> c >> x >> y;
if(c == 0)
{
int number = y - x, answer = 0;
while(number)
{
int power = 31 - __builtin_clz(y - x);
answer = max(answer, max(e[power][x], e[power][y + 1 - (1<<power)]));
number -= (1 << power);
x += (1 << power);
}
g << answer << '\n';
}
else
update();
}
return 0;
}
void update()
{
e[0][x] = y;
for(int i = 1, p = 1, P = 2; P <= n; i++, p <<=1, P <<=1)
for(int st = 1, mi = p + 1, dr = P; dr <= n; st++, mi++, dr++)
e[i][st] = (e[i-1][st]<e[i-1][mi])?e[i-1][mi]:e[i-1][st];
}