Pagini recente » Romanian IOI Medalists: Careers | Cod sursa (job #2016275) | Cod sursa (job #1194080) | Cod sursa (job #758253) | Cod sursa (job #1473350)
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <ctime>
#define BUCKET 256
#define bucket(x) ((x) / BUCKET)
#define DIM (1 << 13)
#define MAXN 100005
#define first(x) ((x) * BUCKET)
#define max(x, y) ((x) > (y) ? (x) : (y))
using namespace std;
int bpos = DIM, N, M, val[MAXN], MaxBuc[MAXN / BUCKET];
char buf[DIM];
FILE *fout = fopen("data.out", "w");
inline int read_int(){
while (buf[bpos] > '9' || buf[bpos] < '0'){
++bpos;
if (bpos >= DIM) fread(buf, 1, DIM, stdin), bpos = 0;
}
int val = 0;
while (buf[bpos] >= '0' && buf[bpos] <= '9'){
val = val * 10 + buf[bpos++] - '0';
if (bpos == DIM) fread(buf, 1, DIM, stdin), bpos = 0;
}
return val;
}
inline void update(){
int pos = read_int() - 1, value = read_int(), b = bucket(pos);
if (MaxBuc[b] == val[pos]){
MaxBuc[b] = val[pos] = 0;
for (int i = first(b); i < first(b + 1); ++i)
MaxBuc[b] = max(val[i], MaxBuc[b]);
}
val[pos] = value;
MaxBuc[b] = max(MaxBuc[b], value);
}
inline void query(){
int l = read_int() - 1, r = read_int() - 1, maxx = 0, b1 = bucket(l), b2 = bucket(r);
for (int i = b1 + 1; i < b2; ++i) maxx = max(maxx, MaxBuc[i]);
if (maxx < MaxBuc[b1])
for (; l < first(b1 + 1) && l <= r; ++l) maxx = max(maxx, val[l]);
if (maxx < MaxBuc[b2])
for (; r >= first(b2) && r >= l; --r) maxx = max(maxx, val[r]);
printf("%d\n", maxx);
}
int main(){
freopen("tests/grader_test7.in", "r", stdin);
freopen("data.out", "w", stdout);
N = read_int(), M = read_int();
for (int i = 0; i < N; ++i){
val[i] = read_int();
MaxBuc[bucket(i)] = max(MaxBuc[bucket(i)], val[i]);
}
while (M--)
if (read_int()) update();
else query();
//printf("%f\n", (float)clock() / CLOCKS_PER_SEC);
return 0;
}