自适应交互库中的 respondrespond 函数。该函数的核心思想是维护可能的 yy 值范围,并通过选择能使剩余搜索空间最大的回答,确保二分查找的实际查找次数不小于理论最小值。

AC code:

#include <bits/stdc++.h>
using namespace std;

int respond(int n, int q, int x, vector<pair<int, int>> p) {
    int left = 1;
    int right = n;
    for (const auto& [u, v] : p) {
        if (v == 0) {
            left = max(left, u + 1);
        } else if (v == 2) {
            right = min(right, u - 1);
        }
    }
    int range0 = 0, range1 = 0, range2 = 0;
    if (x < right) {
        range0 = right - x;
    }
    
    if (left <= x && x <= right) {
        range1 = 1;
    }
    
    if (x > left) {
        range2 = x - left;
    }
    if (left == right && x == left) {
        return 1;
    }
    if (range0 > range2) {
        return 0;
    } else {
        return 2;
    }
}