对深进代码的疑惑
查看原帖
对深进代码的疑惑
759274
Stevehim楼主2023/9/6 14:25

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)]);
		}
	}

可以看到是对将输入的序列和输入的问题加入同一个数组里进行离散化
求助这样为什么是对的呢?

2023/9/6 14:25
加载中...