题目来源:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1729
1729: 查找学号个数(升级版)
时间限制: 1 Sec 内存限制: 64 MB题目描述
上次学校交给的任务相信大家应该完成得不错,这一次,学校又给我们出难题了,学校这回要抽取更多的学号了。迎接挑战吧! 学校从全校学生的学号中随机抽取n个学号,然后给出一个学生的学号k,问你在这些抽取出来的学号中有多少个学号比此学号小。
输入
第一行为两个整数n,m(1≤n,m≤5000000),n表示总共抽取了n个学号,m表示有m个学号需要你来回答上面的问题。 接下来有n行,每行为一个整数t,t表示被抽取到的一个学号(1≤t≤10^4); 再接下来有m行,每行为一个整数,表示给出的学号k(1≤k≤10^4)。
输出
对于每个学号k求出在所有抽取的学号中比其小的学号的个数。
样例输入
5 3
5
4
3
2
1
2
4
5
样例输出
1
3
4
解析:利用数组计数
代码:
#include<iostream>
using namespace std;
int main()
{
int a[10010] = {}, b, x;
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> x;
a[x]++;
}
int sum;
for (int i = 1; i <= m; i++)
{
sum = 0;
cin >> b;
for (int j = 1; j <b; j++)
{
sum += a[j];
}
cout << sum << endl;
}
}
/**************************************************************
Problem: 1729
User: 201730685257
Language: C++
Result: 正确
Time:0 ms
Memory:1484 kb
****************************************************************/