Pagini recente » Cod sursa (job #2001755) | Cod sursa (job #2227247) | Cod sursa (job #1549044) | Cod sursa (job #1939086) | Cod sursa (job #2245847)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int val[4 * maxn];
int noduri[4 * maxn];
int n, m, a, b, raspuns, op;
void update (int nod, int stanga, int dreapta, int pozitie, int valoare){
if (stanga > pozitie || dreapta < pozitie ){
return;
}
if (stanga == dreapta){
val[nod] = valoare;
return;
}
//if (valoare <= (stanga + dreapta)/ 2){
update(nod * 2, stanga, (stanga + dreapta)/ 2, pozitie, valoare);
//}
//if (valoare > (stanga + dreapta)/ 2){
update(nod * 2 + 1, (stanga + dreapta)/ 2 + 1, dreapta, pozitie, valoare);
//}
val[nod] = max(val[2 * n], val[2 * n + 1]);
}
void query (int nod, int stanga, int dreapta){
if (stanga >= a && dreapta <= b){
raspuns = max(raspuns, val[nod]);
return;
}
int mijloc = (stanga + dreapta)/ 2;
if (mijloc >= a){
query(nod * 2, stanga, dreapta);
}
if (mijloc < b){
query(nod * 2 + 1, mijloc + 1, dreapta);
}
}
int main() {
ifstream f("arbint.in");
ofstream g("arbint.out");
f >> n >> m;
for (int i = 1; i <= n; i++){
f >> noduri[i];
update(1, 1, n , i, noduri[i]);
}
for (int i = 1; i <= m; i ++){
f >> op >> a >> b;
if ( op == 0){
raspuns = 0;
query(1, 1, n);
g << raspuns << "\n";
}
else{
update( 1, 1, n , a , b);
}
}
return 0;
}