Pagini recente » Cod sursa (job #3150989) | Cod sursa (job #1403049) | Cod sursa (job #1690979) | Cod sursa (job #2743155) | Cod sursa (job #2002846)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int MAXN = 100000;
int v[MAXN + 1000];
int maxime[105];
void update(int n, int v[MAXN + 1000], int maxime[105], int a, int rad){
int i = (a-1)/rad;
maxime[i] = -1;
for(int k = rad*i+1; k <= rad*(i+1); ++k){
if(v[k] > maxime[i]) maxime[i] = v[k];
}
}
void query(int n, int v[MAXN + 1000], int maxime[105], int a, int b, int rad){
int left = (a-1)/rad;
int right = (b-1)/rad;
int best = -1;
for(int i = left + 1; i < right; ++i){
best = max(best, maxime[i]);
}
for(int i = a; i <= rad*(left+1); ++i){
best = max(best, v[i]);
}
for(int i = rad*right+1; i <= b; i++){
best = max(best, v[i]);
}
g << best << "\n";
}
int main()
{
int n, m;
f >> n >> m;
int rad = sqrt(n);
for(int i = 1; i <= n; ++i){
f >> v[i];
if(v[i] > maxime[(i - 1) / rad]){
maxime[(i - 1) / rad] = v[i];
}
}
for(int type, a, b; m; --m){
f >> type >> a >> b;
if(type){
v[a] = b;
update(n, v, maxime, a, rad);
}
else{
query(n, v, maxime, a, b, rad);
}
}
return 0;
}