Pagini recente » Cod sursa (job #119639) | Cod sursa (job #523959) | Cod sursa (job #1529218) | Cod sursa (job #2845450) | Cod sursa (job #1786312)
#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){
x = (float)a/rad;
y = (float)b/rad;
M = -1;
if (x != (int)x) {
if ((int)x != (int)y)
for (j = (int)x + 1; j <= (int)y; ++j)
if (maxim[j] > M) M = maxim[j];
}
//if (y != (int)y) y++;
else{
if ((int)x != (int)y)
for (j = (int)x; j <= (int)y; ++j)
if (maxim[j] > M) M = maxim[j];
}
for (j = a; j <= (int)x * 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)
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;
}