Pagini recente » Cod sursa (job #2674560) | Cod sursa (job #1940972) | Cod sursa (job #1645762) | Cod sursa (job #523780) | Cod sursa (job #2816632)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m, i, j, op, a, b;
int v[NMAX];
int batog[350];
const int sq = 320;
void update(int i, int x)
{
if (batog[i / sq] <= x)
{
batog[i / sq] = x;
v[i] = x;
}
else if (batog[i / sq] > x)
{
v[i] = x;
batog[i / sq] = -1;
for (int j = i / sq * sq; j < i / sq * sq + sq; ++j)
{
batog[i / sq] = max(batog[i / sq], v[j + 1]);
}
}
}
int query(int a, int b)
{
int maxx = -1;
int pozfirstinterval = (a + sq - 1) / sq * sq;
int pozlastinterval = b / sq * sq;
while (a <= b && a < pozfirstinterval)
{
maxx = max(maxx, v[a++]);
}
while (b >= a && b >= pozlastinterval)
{
maxx = max(maxx, v[b--]);
}
pozfirstinterval = pozfirstinterval / sq;
pozlastinterval = pozlastinterval / sq;
while (pozfirstinterval < pozlastinterval)
maxx = max(maxx, batog[pozfirstinterval++]);
return maxx;
}
int main()
{
in >> n >> m;
for (i = 1; i <= n; ++i)
{
in >> v[i];
}
for (i = 0; i < n; ++i)
{
batog[i / sq] = max(batog[i / sq], v[i + 1]);
}
for (j = 1; j <= m; ++j)
{
in >> op >> a >> b;
if (op == 1)
{
update(a, b);
}
else
{
out << query(a, b) << '\n';
}
}
return 0;
}