头文件 A
题目链接: ybtoj高效进阶 21287
题目大意
给你两个数组 A,B,A 里面数字互不相同。
然后 A 里面的数字会从小到大,每个数字选 B 个还有的不比它大的数字取走。
然后要你输出 A 中的每个数字取走了多少个数字。
思路
简单的模拟,排序双指针搞搞即可。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
struct node {
int pl, x;
}a[100001];
int n, m, ans[100001];
int b[100001];
bool cmp(node x, node y) {
return x.x < y.x;
}
int main() {
// freopen("balloon.in", "r", stdin);
// freopen("balloon.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &a[i].x), a[i].pl = i;
for (int j = 1; j <= m; j++) scanf("%d", &b[j]);
sort(a + 1, a + n + 1, cmp);
sort(b + 1, b + m + 1);
int now = 1;
for (int i = 1; i <= n; i++) {
while (now <= m && a[i].x >= b[now]) ans[a[i].pl]++, now++;
}
for (int i = 1; i <= n; i++)
printf("%d\n", ans[i]);
return 0;
}