Pagini recente » Cod sursa (job #1193421) | Cod sursa (job #2369862) | Cod sursa (job #1532198) | Cod sursa (job #2777675) | Cod sursa (job #3228676)
#include <stdio.h>
#define MAXN 100000
int n;
int aint[2 * MAXN];
static inline int max(int a, int b) {
return a > b ? a : b;
}
void build() {
int i;
for(i = n - 1; i >= 1; i--)
aint[i] = max(aint[i * 2], aint[i * 2 + 1]);
}
void update(int poz, int val) {
int i;
poz += n;
aint[poz] = val;
for(i = poz / 2; i > 0; i /= 2)
aint[i] = max(aint[i * 2], aint[i * 2 + 1]);
}
int query(int l, int r) {
int rez;
l += n;
r += n;
rez = -1;
while(l <= r) {
if(l % 2 == 1) {
rez = max(rez, aint[l]);
l++;
}
l /= 2;
if(r % 2 == 0) {
rez = max(rez, aint[r]);
r--;
}
r /= 2;
}
return rez;
}
int main() {
FILE *fin, *fout;
int m, tip, a, b, i;
fin = fopen("arbint.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(i = 0; i < n; i++)
fscanf(fin, "%d", &aint[i + n]);
build();
fout = fopen("arbint.out", "w");
for(i = 0; i < m; i++) {
fscanf(fin, "%d%d%d", &tip, &a, &b);
if(tip == 0)
fprintf(fout, "%d\n", query(a - 1, b - 1));
else
update(a - 1, b);
}
fclose(fout);
fclose(fin);
return 0;
}