Pagini recente » Cod sursa (job #425806) | Cod sursa (job #2176395) | Clasament preoni62b | Cod sursa (job #903723) | Cod sursa (job #531408)
Cod sursa(job #531408)
#include<cstdio>
using namespace std;
#define NMAX 100001
int N;
int arb[5*NMAX];
int val, pos;
int left, right;
int max(int a, int b) {
return a > b? a: b;
}
void update(int nod, int st, int dr) {
if (st == dr) {
arb[nod] = val;
return;
}
int mij = (st + dr) / 2;
if (pos <= mij) update(nod * 2, st, mij);
else update(nod * 2 + 1, mij + 1, dr);
arb[nod] = max (arb[2*nod], arb[2*nod+1]);
}
int arb_max(int nod, int st, int dr) {
if (left <= st && dr <= right) return arb[nod];
int mij = (st + dr) / 2;
int maxleft, maxright;
maxleft = maxright = 0;
if (left <= mij) maxleft = arb_max(nod * 2, st, mij);
if (mij < right) maxright = arb_max(nod * 2 + 1, mij + 1, dr);
return max(maxleft, maxright);
}
int main() {
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int M;
scanf("%d %d", &N, &M);
for (int i = 1; i <= N; i++) {
scanf("%d", &val);
pos = i;
update(1, 1, N);
}
int op, a, b;
for (int i = 0; i < M; i++) {
scanf("%d %d %d", &op, &a, &b);
if (!op) {
left = a;
right = b;
printf("%d\n", arb_max(1,1,N));
}
else {
val = b;
pos = a;
update(1, 1, N);
}
}
return 0;
}