社区讨论

二分第一个点wa

P2249【深基13.例1】查找参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lobppmbn
此快照首次捕获于
2023/10/30 00:55
2 年前
此快照最后确认于
2023/11/04 05:34
2 年前
查看原帖
CPP
#include <cstdio>

int num[1000010], n;
int check(int x)
{
    int l = 1, r = n, mid;
    while(l <= r)
    {
        mid = (l + r) / 2;
        if(num[mid] == x)
        {
            if(num[mid - 1] == x)
                r = mid - 1;   //找第一个
            else
                return mid;            
        }
        else if(num[mid] > x)
            r = mid - 1;
        else
            l = mid + 1;
    }
    return -1;
}
int main()
{
    int m, tem;
    scanf("%d %d", &n, &m);
    for(int i = 1; i <= n; i++)
        scanf("%d", &num[i]);
    for(int i = 1; i <= m; i++)
    {
        scanf("%d", &tem);
        printf("%d ", check(tem));
    }
    return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...