Pagini recente » Cod sursa (job #1297513) | Cod sursa (job #1630845) | Cod sursa (job #98834) | Cod sursa (job #1121745) | Cod sursa (job #2003405)
#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[405];
void update(int n, int v[MAXN + 1000], int maxime[405], int a, int rad){
int i = a/rad;
maxime[i] = -1;
for(int k = rad*i; k < rad*(i+1); ++k){
if(v[k] > maxime[i]) maxime[i] = v[k];
}
}
void query(int n, int v[MAXN + 1000], int maxime[405], int a, int b, int rad){
int left = a/rad;
int right = b/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 <= b; ++i){
best = max(best, v[i]);
}
for(int i = max(rad*right, a); 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 = 0; i < n; ++i){
f >> v[i];
if(v[i] > maxime[i/rad]){
maxime[i/rad] = v[i];
}
}
for(int type, a, b; m; --m){
f >> type >> a >> b;
if(type){
v[a-1] = b;
update(n, v, maxime, a-1, rad);
}
else{
query(n, v, maxime, a-1, b-1, rad);
}
}
return 0;
}