Pagini recente » Cod sursa (job #429221) | Cod sursa (job #319234) | Cod sursa (job #894115) | Cod sursa (job #1250777) | Cod sursa (job #2680452)
//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;
}