#CSPJSH15Q33. 珅泽教育CSP-J第一轮模拟考第十五套 第 33 题

珅泽教育CSP-J第一轮模拟考第十五套 第 33 题

二、阅读程序(判断题每题1分,选择题每题3分,共计40分;判断题正确填 T,错误填 F)

第3题

int A[1024];
int cache[1024];

int build(int begin, int end, int node)
{
    if (begin + 1 == end) {
        std::cin >> A[begin];
        return A[begin];
    }
    else {
        auto mid = (begin + end) / 2;
        auto lson = node * 2 + 1;
        auto rson = lson + 1;
        auto left = build(begin, mid, lson);
        auto right = build(mid, end, rson);
        if (left <= right) {
            cache[node] = true;
            return left;
        }
        else {
            cache[node] = false;
            return right;
        }
    }
}

void print(int begin, int end, int node) {
    if (begin + 1 == end) {
        std::cout << A[begin] << " ";
    }
    else {
        auto mid = (begin + end) / 2;
        auto lson = node * 2 + 1;
        auto rson = lson + 1;
        if (cache[node]) {
            print(begin, mid, lson);
            print(mid, end, rson);
        }
        else {
            print(mid, end, rson);
            print(begin, mid, lson);
        }
    }
}

void solve(int n)
{
    build(0, 1 << n, 0);
    print(0, 1 << n, 0);
}

调用 solve(n) 时,cache[] 数组中会被使用的下标范围是( )。

{{ select(1) }}

  • [0,2n)[0,2^n)
  • [0,2n][0,2^n]
  • [0,2n+1)[0,2^{n+1})
  • [0,2n+1][0,2^{n+1}]