下面是用C++解决该问题的代码:

#include <iostream>
#include <vector>
using namespace std;

int binarySearch(vector<int>& nums, int target) {
    int left = 0;
    int right = nums.size() - 1;
    int ans = -1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] > target) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return ans;
}

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> nums(N);
    for (int i = 0; i < N; i++) {
        cin >> nums[i];
    }
    for (int i = 0; i < M; i++) {
        int x;
        cin >> x;
        int result = binarySearch(nums, x);
        cout << result << endl;
    }
    return 0;
}

该代码首先定义了一个二分查找函数binarySearch,该函数接受一个严格升序的序列nums和一个目标值target,返回最小的满足nums[i] > target的索引i,若不存在则返回-1。

然后在主函数中,首先读入输入的N和M,然后创建一个长度为N的向量nums,用于存储给定序列。接下来使用循环读入N个数,将其存入nums中。接着使用循环读入M个询问参数,并调用二分查找函数进行查找,并将结果输出。

最后,返回0表示程序正常结束

D2uae 二分查找3用c++解决以下问题时间限制:50s 内存限制:2560MB 代码提交间隔:3分钟现在可以提交 问题描述 给定一个长为N的严格升序序列aa0 a1 aN-1。有M个询问每个询问有一个参数x求最小的i0=iN使aix若不存在则为-1。输入格式 输入共N+M+1行。 第一行两个整数NM。 接下来N行每行一个数表示给定序列。 接下来M行每行一个数表示询问参数。

原文地址: http://www.cveoy.top/t/topic/iLpk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录