Pagini recente » Cod sursa (job #335579) | Cod sursa (job #1684882) | Cod sursa (job #2830269) | Cod sursa (job #1464819) | Cod sursa (job #2762289)
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m, v[100320], x, a, b, DIM, Max[320];
int gaseste(int i) {
return i / DIM + (i % DIM != 0);
}
void update(int pos, int val) {
v[pos] = val;
int grupa = gaseste(pos);
Max[grupa] = 0;
for (int i = (grupa-1)*DIM+1; i <= grupa * DIM; i++)
Max[grupa] = max(Max[grupa], v[i]);
}
int maxim(int st, int dr) {
int MAX = 0;
int grupaSt = gaseste(st);
int grupaDr = gaseste(dr);
if (grupaDr == grupaSt) {
for (int i = st; i <= dr; i++)
MAX = max(MAX, v[i]);
return MAX;
}
for (int i = st; i <= grupaSt * DIM; i++)
MAX = max(MAX, v[i]);
for (int i = grupaSt+1; i <= grupaDr-1; i++)
MAX = max(MAX, Max[i]);
for (int i = (grupaDr-1)*DIM+1; i <= dr; i++)
MAX = max(MAX, v[i]);
return MAX;
}
int main() {
f >> n >> m;
DIM = sqrt(n);
for (int i = 1; i <= n; i++) {
f >> v[i];
int grupa = gaseste(i);
Max[grupa] = max(grupa, v[i]);
}
for (int i = 1; i <= m; i++) {
f >> x >> a >> b;
if (!x)
g << maxim(a, b) << '\n';
else
update(a, b);
}
return 0;
}