Pagini recente » Cod sursa (job #2438529) | Cod sursa (job #937142) | Cod sursa (job #1325580) | Cod sursa (job #2080393) | Cod sursa (job #2814433)
#include <stdio.h>
using namespace std;
FILE *fin, *fout;
#define MAXN 100000
#define RAD_MAXN 400
int v[MAXN + 1];
int batog[RAD_MAXN];
int radn;
int calcRad(int nr) {
int i;
i = 0;
while ( i * i <= nr ) {
i++;
}
i--;
return i;
}
int calcAns(int first, int last) {
int first_seq, last_seq, maxval;
first_seq = first / radn + (first % radn > 1);
last_seq = last / radn - 1;
maxval = 0;
while ( first < (first_seq + 1) * radn && first <= last) {
if ( maxval < v[first] ) {
maxval = v[first];
}
first++;
}
while ( first_seq <= last_seq ) {
if ( maxval < batog[first_seq] ) {
maxval = batog[first_seq];
}
first_seq++;
}
while ( last > (last_seq + 1) * radn && last >= first) {
if ( maxval < v[last] ) {
maxval = v[last];
}
last--;
}
return maxval;
}
void update(int poselem, int val) {
int sequence, i;
sequence = poselem / radn - (poselem % radn == 0);
if ( batog[sequence] == v[poselem] || batog[sequence] < val ) {
batog[sequence] = 0;
v[poselem] = val;
for ( i = sequence * radn + 1; i <= (sequence + 1) * radn; i++ ) {
if ( batog[sequence] < v[i] )
batog[sequence] = v[i];
}
} else
v[poselem] = val;
}
int main() {
int n, m, q, a, b, i;
fin = fopen("arbint.in", "r");
fout = fopen("arbint.out", "w");
fscanf(fin, "%d%d", &n, &m);
radn = calcRad(n);
for ( i = 1; i <= n; i++ ) {
fscanf(fin, "%d", &v[i]);
if ( v[i] > batog[i / radn - (i % radn == 0)] )
batog[i / radn - (i % radn == 0)] = v[i];
}
while ( m-- ) {
fscanf(fin, "%d%d%d", &q, &a, &b);
if ( q == 0 ) {
fprintf(fout, "%d\n", calcAns(a, b));
} else {
update(a, b);
//printf("%d %d ", a, b);
//for ( i = 0; i < n; i++ ) {
// printf("%d ", batog[i]);
//}
//printf("\n");
}
}
fclose(fin);
fclose(fout);
return 0;
}