C++ 二分查找 数组找数问题

C++ 二分查找,数组找数,无法AC,请指教,修改后依然无法AC
【题目描述】
给定一个已经从小到大排好序的数组,数组内有n个元素。现在,你需要在数组中查找元素x,如果x存在,输出它在数组中的位置(如果数组中有多个x,输出位置最小的一个),如果不存在,输出“no”。
【输入格式】
输入包括多行:
第一行包含一个整数n(1<=n<107);
第二行输入n个整数(每个数不会超过107);
第三行输入一个整数k(1<=k<=1000),表示需要进行k次查找;
接下来输入k行,每行输入一个整数x(每个数不会超过107)
【输出格式】
输出k行,对应每次查找的结果。
【输入样例】
6
1 2 2 2 3 4
3
2
5
3
【输出样例】
2
no
5
输入数据1

输入数据 1
6
1 2 2 2 3 4
3
2
5
3
输出数据 1
4
no
5

#include <bits/stdc++.h>
using namespace std;
int a[10000001], n, t;
int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++) // 注意从0开始,因为后面要使用下标访问数组
        scanf("%d", &a[i]);
    scanf("%d", &t);
 
    int left = 0, right = n - 1;
    while (left <= right) // 注意需要使用左右指针的方式进行查找
    {
        int mid = (left + right) / 2;
        if (a[mid] == t)
        {
            printf("%d", mid);
            return 0;
        }
        else if (a[mid] < t)
            left = mid + 1;
        else
            right = mid - 1;
    }
    printf("no"); // 如果没有找到,输出no
    return 0;
}


你的代码是顺序查找,不是二分查找啊

#include <bits/stdc++.h>
using namespace std;
int a[10000001], n, t;
int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++) // 注意从0开始,因为后面要使用下标访问数组
        scanf("%d", &a[i]);
    scanf("%d", &t);
 
    int left = 0, right = n - 1;
    while (left <= right) // 注意需要使用左右指针的方式进行查找
    {
        int mid = (left + right) / 2;
        if (a[mid] == t)
        {
            printf("%d", mid);
            return 0;
        }
        else if (a[mid] < t)
            left = mid + 1;
        else
            right = mid - 1;
    }
    printf("no"); // 如果没有找到,输出no
    return 0;
}