最后一个点超时了,求改进!!
查看原帖
最后一个点超时了,求改进!!
1229013
Mr_LiuXinan楼主2024/2/29 22:39

最后一个点超时了,这是我的代码:

#include <iostream>
using namespace std;

int nums[1000001], qst;
int n, q;

void Search()
{
    int l = 0, r = n + 1;
    int mid = (l + r) / 2;
    while (nums[mid] != qst)  // 二分
    {
        if (nums[mid] > qst)
            r = mid;
        else
            l = mid;
        mid = (l + r) / 2;
        if (r - l <= 1)
        {
            cout << -1 << " ";
            return;
        }
    }
    while (nums[mid] == nums[mid - 1])  //  找第一次出现的位置
    {
        --mid;
    }
    cout << mid << " ";
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    cin >> n >> q;
    nums[0] = -1;
    for (int i = 1; i <= n; ++i)
        cin >> nums[i];
    for (int i = 1; i <= q; ++i)
    {
        cin >> qst;
        Search();
    }

    return 0;
}
2024/2/29 22:39
加载中...