non-adaptive 求助
查看原帖
non-adaptive 求助
362750
TernaryTree楼主2023/10/4 10:34

全 WA 显示 non-adaptive,萌新不会自适应交互,不是很懂什么意思,求助

#include <utility>
#include <queue>
#include <algorithm>

int query(int, int);

const int maxn = 1e6 + 10;

struct Q {
	int l, r, id;
	Q() = default;
	Q(int l, int r, int id): l(l), r(r), id(id) {}
};

int nnn;
std::queue<Q> q;
Q a[maxn];
int qwq;

std::pair<int, int> solve(int k) {
	nnn = 1 << k;
	while (!q.empty()) q.pop();
	qwq = 0;
	q.push(Q(1, nnn, 0));
	q.push(Q(1, nnn, 1));
	while (!q.empty()) {
		Q u = q.front();
		q.pop();
		a[++qwq] = u;
		int len = u.r - u.l + 1;
		if (u.id) {
			if (u.l + 1 == u.r) continue;
			for (int i = len >> 1; i >= 2; i >>= 1) {
				q.push(Q(u.l, u.l + i - 1, 0));
			}
		} else {
			if (u.l == u.r - 1) continue;
			for (int i = len >> 1; i >= 2; i >>= 1) {
				q.push(Q(u.r - i + 1, u.r, 1));
			}
		}
	}
	std::sort(a + 1, a + 1 + qwq, [] (Q x, Q y) {
		return x.r - x.l == y.r - y.l ? (x.l == y.l ? x.id < y.id : x.l < y.l) : x.r - x.l > y.r - y.l;
	});
	for (int i = 1; i <= qwq; i++) {
		Q u = a[i];
		int sta;
		if (u.id) {
			sta = query(u.l + 1, u.r);
			if (sta) {
				for (int l = u.l + 1; l != u.r; l += l & -l) {
					if (query(l, l + (l & -l) - 1)) {
						return std::make_pair(l, l + (l & -l) - 1);
					}
				}
			}
		} else {
			sta = query(u.l, u.r - 1);
			if (sta) {
				for (int r = u.r - 1; r != u.l; r -= r & -r) {
					if (query(r - (r & -r) + 1, r)) {
						return std::make_pair(r - (r & -r) + 1, r);
					}
				}
			}
		}
	}
	return std::make_pair(1, nnn);
}
2023/10/4 10:34
加载中...