TimesIsMoney
Time Limit: 1000MS
Memory Limit: 65536KB
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 0 1
Author
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[100005];
int flag;
int erfen1(int x,int n)//找到重复的第一个数字位置
{
int i;
int low = 0;
int high = n-1;
int mid;
while(low<=high)
{
mid = (low + high)/2;
if(a[mid]<x)
low= mid+1;
else
{
high = mid -1;
flag=1;
}
}
if(flag==1)
return low;
else
return -1;
}
int erfen2(int x,int n)//找到重复数字的最后一个位置
{
int i;
int low = 0;
int high = n-1;
int mid;
int flag = 0;
while(low<=high)
{
mid = (low + high)/2;
if(a[mid]>x)
high= mid-1;
else
{
low = mid +1;
flag=1;
}
}
if(flag==1)
return high;
else
return -1;
}
int main()
{
int n,m;
int i,j;
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 x;
scanf("%d",&x);
if(erfen1(x,n)==-1)
printf("0\n");
else
printf("%d\n",erfen2(x,n)-erfen1(x,n)+1);
}
}
return 0;
}
Yunjing