4. 二分查找-变形3 Wrong Answer 20 分

题目描述
输入
𝑁
(
𝑁
<

1
0
6
)
N(N<=10
6
) 个从小到大的有序数,用二分查找给定数
𝑀
M 的个数,输出对应的个数,若无此数输出
0
0;

输入格式
第一行一个整数
𝑛
n,第二行
𝑛
n 个整数
𝑎
𝑖
a
i

表示要查找的有序数列,第三行若干个整数
𝑚
𝑖
m
i

表示要查找的数字(最多有
𝑆
S 个)。

输出格式
对于每一个
𝑚
𝑖
m
i

,输出其个数,若无此数输出 0;,用空格间隔,如果不存在,则输出 0。

样例
Input 1
5
1 2 2 2 5
2
Output 1
3
数据范围
0
<
𝑛

1
0
6
0<n≤10
6

0

𝑎
𝑖

1
0
9
0≤a
i

≤10
9

0

𝑚
𝑖

1
0
9
0≤m
i

≤10
9

0
<
𝑆

10000
0<S≤10000。
#include<bits/stdc++.h>
using namespace std;
int n,a[100005],s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(cin>>s){
int l=1,r=n,x=0,y=0;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==s){
x=mid;
r=mid-1;
}else if(a[mid]>s){
r=mid-1;
}else{
l=mid+1;
}
}
l=1,r=n;
while(l<=r){
int mid=(l+r)/2;
if(a[mid]==s){
y=mid;
l=mid+1;
}else if(a[mid]>s){
r=mid-1;
}else{
l=mid+1;
}
}
if(!x&&!y){
cout<<0<<" “;
continue;
}
cout<<y-x+1<<” ";
}
return 0;
}

2 个赞

能不能预先格式化一下

1 个赞

我教你

1 个赞

此帖子已被社区举报,现已被临时隐藏。

1 个赞

@陶怡然 AC了给个解决方案

1 个赞