Problem Description
给你一个序列,有N个整数(int以内),判断一个数在这个序列中出现几次。
Input
多组输入,输入到文件结尾
首先输入一个n,然后输入n个整数。
在输入一个m,代表查询的个数 ,然后输入m个数(int以内)。
n,m <= 100000;
Output
对应每一次查询,输出这个数在序列中出现几次。
Example Input
5 1 2 2 3 5 3 2 4 5
Example Output
2 01
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[100005]; int flag; int search1(int k,int n)//找到重复的第一个数字位置 { int l = 0; int r= n-1; int mid; flag=0; while(l<=r) { mid = (l + r)/2; if(a[mid]<k) l= mid+1; else { r = mid -1; flag=1; } } if(flag==1) return l; else return -1; } int search2(int k,int n)//找到重复数字的最后一个位置 { int l = 0; int r = n-1; int mid; flag = 0; while(l<=r) { mid = (l+ r)/2; if(a[mid]>k) r= mid-1; else { l = mid +1; flag=1; } } if(flag==1) return r; else return -1; } int main() { int n,m; int i; while(~scanf("%d",&n)) { memset(a,0,sizeof(a)); for(i = 0; i < n; i++) { scanf("%d",&a[i]); } sort(a,a+n); scanf("%d",&m); for(i=0;i<m;i++) { int k; scanf("%d",&k); if(search1(k,n)==-1) printf("0\n"); else printf("%d\n",search2(k,n)-search1(k,n)+1); } } return 0; }