为什么我的代码过不了(1WA 2RE)
原题链接:8022.查找2026-07-26 14:01:35
发布于:河北
#include<bits/stdc++.h>
using namespace std;
int n, a[114514], x;
int erfen(int x){
int L = 1;
int R = n;
int ans = -1;
while(L <= R){
int mid = (L + R) / 2;
if(a[mid] > x){
R = mid - 1;
}
else if(a[mid] == x){
ans = mid;
break;
}
else if(a[mid] < x){
L = mid + 1;
}
}
return ans;
}
int m;
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
for(int i = 1; i <= m; i++){
int x;
cin >> x;
int anss = erfen(x);
cout << anss << " ";
}
return 0;
}
全部评论 2
嗯,对我很有帮助
2026-09-19 来自 新疆
0#include <bits/stdc++.h>
using namespace std;const int MAXN = 1000005; // 修正数组大小
int n, m;
int a[MAXN];// 修正后的二分:查找第一个等于 x 的位置
int erfen(int x) {
int L = 1;
int R = n;
int ans = -1;while (L <= R) { int mid = L + (R - L) / 2; // 防止溢出 if (a[mid] >= x) { // 如果中间值 >= x,说明第一个 x 可能在 mid 或者 mid 左边 if (a[mid] == x) { ans = mid; // 记录当前找到的位置 } R = mid - 1; // 关键:继续向左搜索,看有没有更靠前的 x } else { // a[mid] < x,目标肯定在右边 L = mid + 1; } } return ans;}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i <= m; i++) { int x; cin >> x; cout << erfen(x) << " "; } return 0;}
2026-09-11 来自 四川
0thanks
2026-09-13 来自 北京
0


























有帮助,赞一个