rt,深进的代码在主函数里对输入问题的处理是这样的
for (int i = 1; i <= m; i++) {
q[i].a = read(), q[i].b = read(), q[i].c = read();
if (q[i].a != 3) q[i].d = read();
else lsh[++len] = q[i].c;
if (q[i].a == 4 || q[i].a == 5) lsh[++len] = q[i].d;
}
sort(lsh + 1, lsh + len + 1);
len = unique(lsh + 1, lsh + len + 1) - lsh - 1;
for (int i = 1; i <= n; i++) {
a[i] = lower_bound(lsh + 1, lsh + 1 + len, a[i]) - lsh;
add(i, 1);
}
lsh[0] = -inf;
lsh[len + 1] = inf;
for (int i = 1; i <= m; i++) {
if (q[i].a == 3) {
add(q[i].b, -1);
a[q[i].b] = lower_bound(lsh + 1, lsh + 1 + len, q[i].c) - lsh;
add(q[i].b, 1);
}
if (q[i].a == 1) {
q[i].d = lower_bound(lsh + 1, lsh + 1 + len, q[i].d) - lsh;
printf("%d\n", find_rank(q[i].b, q[i].c, q[i].d));
}
if (q[i].a == 2) {
printf("%d\n", lsh[find_num(q[i].b, q[i].c, q[i].d)]);
}
if (q[i].a == 4) {
q[i].d = lower_bound(lsh + 1, lsh + 1 + len, q[i].d) - lsh;
printf("%d\n", lsh[find_pre(q[i].b, q[i].c, q[i].d)]);
}
if (q[i].a == 5) {
q[i].d = lower_bound(lsh + 1, lsh + 1 + len, q[i].d) - lsh;
printf("%d\n", lsh[find_nxt(q[i].b, q[i].c, q[i].d)]);
}
}
可以看到是对将输入的序列和输入的问题加入同一个数组里进行离散化
求助这样为什么是对的呢?