Pagini recente » Cod sursa (job #2896252) | Cod sursa (job #952776) | Cod sursa (job #1526881) | Cod sursa (job #1549153) | Cod sursa (job #2058328)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int const nmax = 100000;
int arb[4 * nmax + 4],n, m;
void update(int tata) {
if(0 < tata) {
arb[tata] = max(arb[2 * tata], arb[2 * tata + 1]);
update(tata / 2);
}
}
int query(int st, int dr) {
int answer = 0;
if(st == dr) {
answer = arb[st];
} else if(st < dr) {
if(st % 2 == 1) {
answer = max(answer, arb[st]);
st++;
}
if(dr % 2 == 0) {
answer = max(answer, arb[dr]);
dr--;
}
answer = max(answer, query(st / 2, dr / 2));
}
return answer;
}
int main() {
in >> m >> n;
int p = 1;
while((1<<p) < n)
p++;
int ni = (1<<p) - 1;
for(int i=1; i<=m; i++) {
in >> arb[ni + i];
update((ni + i) / 2);
}
for(int i = 1; i <= m; ++ i) {
int tip, a, b;
in >> tip >> a >> b;
if(tip == 0) {
out << query(ni + a, ni + b) << '\n';
} else {
arb[ni + a] = b;b;
update((ni + a) / 2);
}
}
return 0;
}