Pagini recente » Cod sursa (job #2549054) | Cod sursa (job #2502578) | Cod sursa (job #1097522) | Cod sursa (job #1537988) | Cod sursa (job #1786407)
#include <iostream>
#include <cstdio>
#include <fstream>
#include <math.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n, m, v[100001], maxim[1000];
int main()
{
int i, j, rad, op, a, b, M, xx, nr_g;
float x, y;
fin >> n >> m;
rad = (int)sqrt(n);
if((int)sqrt(n) != sqrt(n)) nr_g = rad + 1;
else nr_g = rad;
for (i = 1; i <= n; ++i){
fin >> v[i];
}
for (i = 1; i<= nr_g; ++i){
maxim[i] = v[rad * (i - 1)+1];
for (j = rad * (i - 1) + 1; j <= rad * i && j <= n; ++j){
if (v[j] > maxim[i]) maxim[i] = v[j];
}
}
for (i = 1; i <= m; ++i){
fin >> op >> a >> b;
if (op == 0){
if (a == b) M = v[a];
else {
x = (float)a/rad;
y = (float)b/rad;
M = -1;
if ((int)x != x){
xx = (int)x + 1;
}
else xx = (int)x;
for (j = xx * rad + 1; j <= (int)y * rad; ++j)
if (maxim[j] > M) M = maxim[j];
for (j = a; j <= (int)y * rad; ++j)
if (v[j] > M) M = v[j];
for (j = (int)y * rad + 1; j <= b; ++j)
if(v[j] > M) M = v[j];
}
fout << M <<"\n";
}
else{
x = (float)a/rad;
if ((int)x != x){
xx = (int)x + 1;
}
else xx = (int)x;
if (v[a] == maxim[xx])
{
maxim[xx] = -1;
for (j = rad * (xx - 1) + 1; j <= rad * xx && j <= nr_g; ++j)
if (v[j] > maxim[xx] && j != a)maxim[xx] = v[j];
}
v[a] = b;
if (v[a] > maxim[xx]) maxim[xx] = v[a];
}
}
return 0;
}