2 条题解
-
1
#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
#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
- 上传者