Pagini recente » Cod sursa (job #225014) | Cod sursa (job #907363) | Cod sursa (job #2686456) | Cod sursa (job #2576080) | Cod sursa (job #935806)
Cod sursa(job #935806)
#include <fstream>
#define MAX_SIZE (1 << 18) + 100
using namespace std;
ifstream f("arbint.in"); ofstream g("arbint.out");
int n, k, t, a, b, poz, val, maxim, MaxArb[MAX_SIZE];
int start, finish;
void update(int, int, int);
void query (int, int, int);
int main() {
f >> n >> k;
for(int i = 1; i <= n; ++i) {
f >> val;
poz = i;
update(1, 1, n);
}
for(int i = 1; i <= k; ++i) {
f >> t >> a >> b;
if(t) {
poz = a, val = b;
update(1, 1, n);
}
else {
maxim = -1;
start = a, finish = b;
query(1, 1, n);
g << maxim << '\n';
}
}
return 0;
}
void update(int nod, int st, int dr) {
if(st == dr) {
MaxArb[nod] = val;
return;
}
int m = (st + dr) >> 1;
if(poz <= m) update(2 * nod, st, m);
else update(2 * nod + 1, m + 1, dr);
MaxArb[nod] = max(MaxArb[2 * nod], MaxArb[2 * nod + 1]);
}
void query( int nod, int st, int dr) {
if(start <= st && dr <= finish) {
if(maxim < MaxArb[nod]) maxim = MaxArb[nod];
return;
}
int m = (st + dr) >> 1;
if(start <= m) query(2 * nod, st, m);
if(m < finish) query(2 * nod + 1, m + 1, dr);
}