题目:
二分查找(==x个数) 题目描述 给定一个包含 n 个整数的数列,及 T 次查询,对于每次查询的 x ,回答 x 在数列中的出现次数?
注意:若 x 不在数列中,个数为 0 。
输入格式 第一行一个整数 n ,表示数列中整数的个数;
第二行 n 个整数(int 范围内),表示数列中的元素;
第三行一个整数 T ,表示询问的次数;
接下来 T 行,每行一个整数 x(int 范围内),表示查询的整数。
输出格式 T 行,每行一个结果。
样例 样例输入 10
7 2 1 3 5 9 5 1 8 1
5
0
1
4
9
10
样例输出 0
3
0
1
0
提示 所有数据满足:1⩽n,T⩽10^ 5
#include <bits/stdc++.h>
using namespace std;
int a[100005],bol=0,sum;
int bins(int l, int r, int x) {
sum=0;
while(l<=r)
{
int mid=(l+r)/2;
if(a[mid]==x)
{
sum++;
int i=mid;
int j=mid;
while(bol<2)
{
j--;
i++;
if(a[i]==x)
{
sum++;
}
else if(a[j]==x)
{
sum++;
}
else if(a[j]!=x)
{
bol++;
}
else bol++;
}
}
if(a[mid]<x)
{
l=mid+1;
}
else
{
r=mid-1;
}
}
return sum;
}
int main()
{
int n,t,x;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);
cin>>t;
for(int i=0;i<t;i++)
{
cin>>x;
int ans=bins(1,n,x);
cout<<ans<<endl;
sum=0;
}
return 0;
}