Pagini recente » Cod sursa (job #535045) | Cod sursa (job #509275) | Cod sursa (job #939053) | Cod sursa (job #39320) | Cod sursa (job #3251447)
//sqrt
#include <bits/stdc++.h>
const std :: string FILENAME = "arbint";
std :: ifstream f (FILENAME + ".in");
std :: ofstream g (FILENAME + ".out");
const int NMAX = 1e5 + 5;
const int l = 320;
int n;
int q;
int cer;
int x;
int y;
int maxi;
int v[NMAX];
int b[l + 5];
int main()
{
f >> n >> q;
for(int i = 0; i < n; i ++)
{
f >> v[i];
b[i / l] = std :: max(b[i / l], v[i]);
}
while(q --)
{
f >> cer;
if(cer == 0)
{
maxi = -1;
f >> x >> y;
x --;
y --;
if(x > y)
{
std :: swap(x, y);
}
if(x / l == y / l)
{
for(int i = x; i <= y; i ++)
{
maxi = std :: max(maxi, v[i]);
}
g << maxi << '\n';
}
else
{
for(int i = x; i < (x / l + 1) * l; i ++)
{
maxi = std :: max(maxi, v[i]);
}
for(int i = x / l + 1; i < y / l; i ++)
{
maxi = std :: max(maxi, b[i]);
}
for(int i = (y / l) * l; i <= y; i ++)
{
maxi = std :: max(maxi, v[i]);
}
g << maxi << '\n';
}
}
else
{
f >> x >> y;
x --;
v[x] = y;
b[x / l] = -1;
for(int i = (x / l) * l; i < (x / l + 1) * l; i ++)
{
b[x / l] = std :: max(b[x / l], v[i]);
}
}
}
return 0;
}