Pagini recente » Cod sursa (job #126281) | Cod sursa (job #145346) | Cod sursa (job #254500) | Cod sursa (job #3221667) | Cod sursa (job #2680453)
//MlogN
#include <fstream>
std::ifstream fin("arbint.in");
std::ofstream fout("arbint.out");
const int mxn = 1e5 + 1;
int n, m, p, val, st, dr, mx;
int a[4 * mxn + 70];
void zero(int nod, int lb, int rb){
if (lb == rb) { a[nod] = val; return; }
int mb = (lb + rb) / 2;
if (p <= mb) zero(2 * nod, lb, mb);
else zero(2 * nod + 1, mb + 1, rb);
a[nod] = std::max(a[2 * nod], a[2 * nod + 1]);
}
void uno(int nod, int lb, int rb){
if (st <= lb && rb <= dr){ if (mx < a[nod]) mx = a[nod]; return; }
int mb = (lb + rb) / 2;
if (st <= mb) uno(2 * nod, lb, mb);
else if (mb < dr) uno(2 * nod + 1, mb + 1, rb);
}
int main(){
fin >> n >> m;
for (int i = 1; i <= n; ++i){
int z; fin >> z;
p = i, val = z;
zero(1,1,n);
}
for (int i = 1; i <= m; ++i){
int x, y, z;
fin >> x >> y >> z;
if (x == 0){
mx = -1;
st = y, dr = z;
uno(1,1,n);
fout << mx << '\n';
} else {
p = y, val = z;
zero(1,1,n);
}
}
return 0;
}