二分求助
  • 板块学术版
  • 楼主theb0t
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/12/2 16:53
  • 上次更新2023/12/2 19:43:58
查看原帖
二分求助
997236
theb0t楼主2023/12/2 16:53

给定一个长为NN的严格升序序列a(a0,a1⋅⋅⋅aN−1)a(a_0, a_1 \cdot\cdot\cdot a_N-1)。有MM个询问,每个询问有一个参数x,求最大的i(0≤i<N)i(0 \le i<N)使ai<xa_i<x,若不存在则为−1-1。


样例输入

3 5
1
3
3
0
1
2
3
4

样例输出

-1
-1
0
0
2

我的程序输出

-1
-1
-1
-1
2

#include <iostream>
using namespace std;
int n, m;
int a[1000005];
int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 1; i <= m; i++)
    {
        int l = 0, r = n - 1, v, ans = -1;
        cin >> v;
        while (l < r)
        {
            int p = (l + r + 1) >> 1;
            if (a[p] < v) l = p, ans = p;
            else r = p - 1;
        }
        cout << ans << endl;
    }
    return 0;
}
2023/12/2 16:53
加载中...