Pagini recente » Cod sursa (job #2259000) | Cod sursa (job #1062020) | Cod sursa (job #3165043) | Cod sursa (job #2418413) | Cod sursa (job #3268385)
#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 blocksize = 350;
int n, m, c, val, pos, ans, v[Nmax], bat[305], start, fin;
int main()
{
cin >> n >> m;
for(int i=0; i<n; i++)
cin >> v[i];
for(int i=0; i<n; i++)
bat[i / blocksize] = max(bat[i / blocksize], v[i]);
while(m--)
{
cin >> c;
if(c)
{
cin >> pos >> val;
pos--;
if(bat[pos / blocksize] == v[pos] && v[pos] > val)
{
bat[pos / blocksize] = v[pos] = val;
int st = pos / blocksize * blocksize;
int dr = (pos / blocksize + 1) * (blocksize);
int pos_block = pos / blocksize;
for(int i=st; i<dr; i++)
bat[pos_block] = max(bat[pos_block], v[i]);
}
else
{
v[pos] = val;
bat[pos / blocksize] = max(bat[pos / blocksize], val);
}
}
else
{
cin >> start >> fin;
start--;
fin--;
ans = 0;
int lb = start / blocksize;
int rb = fin / blocksize;
for(int i=start; i<= fin && start /blocksize == i / blocksize; i++)
ans = max(ans, v[i]);
for(int i = lb + 1; i <= rb - 1; i++)
ans = max(ans, bat[i]);
for(int i = fin; i >= start && fin / blocksize == i / blocksize; i--)
ans = max(ans, v[i]);
cout << ans << '\n';
}
}
return 0;
}