Pagini recente » Cod sursa (job #218106) | Monitorul de evaluare | Cod sursa (job #1279470) | Cod sursa (job #1225856) | Cod sursa (job #2372936)
#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;
if(number == 0)
{
g << e[0][x] << '\n';
continue;
}
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];
}