Zhdy1234 @ 2023-01-09 10:40:30
#include<bits/stdc++.h>
using namespace std;
long long a[1000010],ans,q,n,m;;
int find(long long key){
int mid,l=1,r=n;
while(l<r){
mid=(l+r)/2;
if(a[mid]==key) return mid;
else if(a[mid]<key) l=mid+1;
else r=mid-1;
}
return -1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>q;
ans=find(q);
cout<<ans<<" ";
}
return 0;
}
by 编码落寞 @ 2023-01-09 11:03:03
@Zhdy1234
你样例并没过
你的输出
1 3 -1
by Zhdy1234 @ 2023-01-09 11:16:48
@编码落寞 sorry,刚没看清qwq
by Zhdy1234 @ 2023-01-09 11:18:29
这次样例肯定过了,但还是全WA
#include<bits/stdc++.h>
using namespace std;
long long a[1000010],ans,q,n,m;;
int find(long long key){
int mid,l=0,r=n-1;
while(l<=r){
mid=l+(r-l)/2;
if(a[mid]==key) return mid;
else if(a[mid]<key) l=mid+1;
else r=mid-1;
}
return -1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>q;
ans=find(q);
cout<<ans<<" ";
}
return 0;
}
by 编码落寞 @ 2023-01-09 11:26:02
@Zhdy1234
你的二分不能判断a[mid]就直接输出。 例如数据:
11 3
1 3 3 3 3 3 9 11 13 15 15
1 3 6
你的程序输出
1 5 -1
by Zhdy1234 @ 2023-01-09 11:48:02
@编码落寞 刚刚改好,已经通过了,感谢