★实验任务
从前有个富商,他拥有 N 件珠宝,每件珠宝都有一个价格。每次有人想向他买价格为
X 的珠宝时,富商都要去数自己总共有多少件该价值的珠宝。因为富商有很多很多的珠宝,
所以他觉得这样做很烦,希望你编个小程序来帮助他。
★数据输入
第一行输入两个正整数 N, Q(N, Q<=500000)。
接下来一行输入 N 个正整数,空格隔开,代表珠宝的价格。
接下来一行输入 Q 个正整数,空格隔开,代表 X。
★数据输出
对于每个 X,输出一行代表富商拥有价格为 X 的珠宝的数量。
从前有个富商,他拥有 N 件珠宝,每件珠宝都有一个价格。每次有人想向他买价格为
X 的珠宝时,富商都要去数自己总共有多少件该价值的珠宝。因为富商有很多很多的珠宝,
所以他觉得这样做很烦,希望你编个小程序来帮助他。
★数据输入
第一行输入两个正整数 N, Q(N, Q<=500000)。
接下来一行输入 N 个正整数,空格隔开,代表珠宝的价格。
接下来一行输入 Q 个正整数,空格隔开,代表 X。
★数据输出
对于每个 X,输出一行代表富商拥有价格为 X 的珠宝的数量。
输入示例 输出示例
5 3 0
3 4 9 6 4 1
1 9 4 2
#include<iostream>
#include<algorithm>
using namespace std;
int a[500000],b[500000];
int main()
{
int n,q,c,k=0,left,right,m;
int i;
scanf("%d %d",&n,&q);
for(i=0;i<n;i++)
scanf("%d",a+i);
sort(a,a+n);
i=0;
while(k<n)
{
for(c=1;k+1<n&&a[k]==a[k+1];c++,k++);
b[i]=c;
a[i++]=a[k++];
}
n=i;
while(q--)
{
scanf("%d",&i);
left=0;
right=n;
while(left<right)
{
m=(left+right)>>1;
if(i<a[m])
right=m;
else if(i>a[m])
left=m+1;
else
break;
}
if(left<right)
printf("%d\n",b[m]);
else
printf("0\n");
}
return 0;
}