题单:二分查找(==x个数)
样例 #1
样例输入 #1
10
7 2 1 3 5 9 5 1 8 1
5
0
1
4
9
10
样例输出 #1
0
3
0
1
0
提示
所有数据满足:
#include<bits/stdc++.h>
using namespace std;
int a[50000005];
int bin_small(int l,int r,int key)
{int ans=-1;while(l<=r){int mid=(l+r)/2;if(a[mid]>key){r=mid-1;}else if(a[mid]<key){l=mid+1;}else if(a[mid]==key){ans=mid;r=mid-1;}}return ans;
}
int bin_big(int l,int r,int key)
{int ans=-1;while(l<=r){int mid=(l+r)/2;if(a[mid]>key){r=mid-1;}else if(a[mid]<key){l=mid+1;}else if(a[mid]==key){ans=mid;l=mid+1;}}return ans;
}
int main(){int n;scanf("%d",&n);int x;for(int i=1;i<=n;i++){scanf("%d",&a[i]);} sort(a+1,a+n+1);int t;scanf("%d",&t);while(t--){scanf("%d",&x);if(bin_big(1,n,x)==-1){cout<<0<<endl;continue;}cout<<bin_big(1,n,x)-bin_small(1,n,x)+1<<endl;}return 0;
}