Pagini recente » Cod sursa (job #241584) | Istoria paginii utilizator/dana.mtn | Cod sursa (job #1785884) | Cod sursa (job #1554913) | Cod sursa (job #2018770)
#include <fstream>
#include <cmath>
#define DIM 355
#define VAL 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
struct bucket
{
int nr, be, en;
};
bucket B[DIM];
int N, M, K, i, j, rad;
int v[VAL], op, a, b;
void Update(int a, int b)
{
int i, j;
v[a]=b;
for (i=1; i<=K; i++)
if (B[i].be<=a && a<=B[i].en)
break;
B[i].nr=0;
for (j=B[i].be; j<=B[i].en; j++)
B[i].nr=max(B[i].nr, v[j]);
}
int GetAnswer(int a, int b)
{
int i, j;
int ANS=0;
for (i=1; i<=K; i++)
{
if (a<=B[i].be && B[i].en<=b)
ANS=max(ANS, B[i].nr);
else
{
if (B[i].be<=a && a<=B[i].en)
{
for (j=a; j<=min(b, B[i].en); j++)
ANS=max(ANS, v[j]);
}
else
{
if (B[i].be<=b && b<=B[i].en)
for (j=max(B[i].be, a); j<=b; j++)
ANS=max(ANS, v[j]);
}
}
}
return ANS;
}
int main()
{
fin >> N >> M;
rad=sqrt(N);
for (i=1; i<=N; i++)
fin >> v[i];
i=1;
while (i<=N)
{
B[++K].be=i;
B[K].en=min(i+rad-1, N);
for (j=B[K].be; j<=B[K].en; j++)
B[K].nr=max(B[K].nr, v[j]);
i+=rad;
}
for (i=1; i<=M; i++)
{
fin >> op >> a >> b;
if (op==0)
fout << GetAnswer(a, b) << '\n';
else
Update(a, b);
}
fin.close();
fout.close();
return 0;
}