2 条题解

  • 1
    @ 2026-8-18 15:33:57

    #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int n, a[N], m; int x;

    int main() { scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); while (m--) { // O(m*logn) scanf("%d", &x); // 二分 int l = 1, r = n; int ans = -1; //不重复的里面查找数字出现的位置 while (l <= r) { // O(logn) int mid = (l + r) / 2; if (a[mid] == x) { ans = mid ; break; } else if (a[mid] < x) { l = mid + 1; } else r = mid - 1; } printf("%d\n", ans); } return 0; }

    • 0
      @ 2026-8-18 15:19:39
      #include <bits/stdc++.h>
      using namespace std;
      const int N=1e6+10;
      int a[N];
      int n,m;
      int x;
      
      int main(){
      	scanf("%d %d",&n,&m);
      	for(int i=1;i<=n;i++)
      		scanf("%d",&a[i]);
      	while(m--){
      		scanf("%d",&x);
      		int l=1,r=n;
      		int ans=-1;
      		while(l<=r){
      			int mid=(l+r)/2;
      			if(a[mid]==x){
      				ans=mid;
      				break;
      			}else if(a[mid]<x){
      				l=mid+1;
      			}else 
      				r=mid-1;
      		}
      		printf("%d\n",ans);
      	}
      	return 0;
      }
      
      • 1

      信息

      ID
      19596
      时间
      1000ms
      内存
      512MiB
      难度
      3
      标签
      递交数
      97
      已通过
      39
      上传者