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