Pagini recente » Cod sursa (job #2710644) | Cod sursa (job #1807028) | Cod sursa (job #1079737) | Cod sursa (job #491945) | Cod sursa (job #3270315)
#include <bits/stdc++.h>
#define cin ci
#define cout co
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int Nmax = 100001;
const int Block = 350;
int n, m, v[Nmax], bat[305], start, fin, c, val, pos, ans;
int main()
{
cin >> n >> m;
for(int i=0; i<n; i++)
cin >> v[i];
for(int i=0; i<n; i++)
bat[i / Block] = max(bat[i / Block], v[i]);
while(m--)
{
cin >> c;
if(c)
{
cin >> pos >> val;
pos--;
if(bat[pos / Block] == v[pos] && v[pos] > val)
{
bat[pos / Block] = v[pos] = val;
int st = pos / Block * Block;
int dr = (pos / Block + 1) * Block;
int posblock = pos / Block;
for(int i = st; i<dr; i++)
bat[posblock] = max(bat[posblock], v[i]);
}
else
{
v[pos] = val;
bat[pos / Block] = max(bat[pos / Block], val);
}
}
else
{
cin >> start >> fin;
start--;
fin--;
int lb = start / Block;
int rb = fin / Block;
int ans = -1;
int endi = (lb + 1) * Block;
if(rb == lb)
for(int i=start; i<=fin; i++)
ans = max(ans, v[i]);
else
{
for(int i=start; i<endi; i++)
ans = max(ans, v[i]);
for(int i=lb + 1; i<rb; i++)
ans = max(ans, bat[i]);
for(int i=rb * Block; i<=fin; i++)
ans = max(ans, v[i]);
}
cout << ans << '\n';
}
}
return 0;
}