C. Leha and Function
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Leha like all kinds of strange things. Recently he liked the function F(n, k). Consider all possible k-element subsets of the set [1, 2, …, n]. For subset find minimal element in it. F(n, k) — mathematical expectation of the minimal element among all k-element subsets.
But only function does not interest him. He wants to do interesting things with it. Mom brought him two arrays A and B, each consists of m integers. For all i, j such that 1 ≤ i, j ≤ m the condition Ai ≥ Bj holds. Help Leha rearrange the numbers in the array A so that the sum is maximally possible, where A’ is already rearranged array.
Input
First line of input data contains single integer m (1 ≤ m ≤ 2·105) — length of arrays A and B.
Next line contains m integers a1, a2, …, am (1 ≤ ai ≤ 109) — array A.
Next line contains m integers b1, b2, …, bm (1 ≤ bi ≤ 109) — array B.
Output
Output m integers a’1, a’2, …, a’m — array A’ which is permutation of the array A.
Examples
input
5
7 3 5 3 4
2 1 3 2 3
output
4 7 3 5 3
input
7
4 6 5 8 8 2 6
2 1 2 2 1 1 2
output
2 6 4 5 8 8 6
排序水题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
struct p
{
int zhi, hao;
bool operator < (const p&a)const
{
return zhi < a.zhi;
}
};
p t1[200001];
int t2[200001];
int dan[201111];
bool cmp(int a, int b) { return a > b; }
int main()
{
int n;
cin >> n;
for (int a=1; a <= n; a++)
{
scanf("%d", &t2[a]);
//t1[a].hao = a;
}
for (int a = 1; a <= n; a++)
{
scanf("%d", &t1[a].zhi);
t1[a].hao = a;
}
sort(t1 + 1, t1 + 1 + n);
sort(t2 + 1, t2 + 1 + n, cmp);
for (int a = 1; a <= n; a++)
{
dan[t1[a].hao] = t2[a];
}
for (int a = 1; a <= n; a++)printf("%d ", dan[a]);
}

本文介绍了一个关于数组重排的问题,目标是通过重新排列数组A中的元素来最大化特定条件下的总和。输入包含两个长度相同的数组A和B,且对于任意i,j,均有A[i] ≥ B[j]。任务是输出重排后的数组A'。
1490

被折叠的 条评论
为什么被折叠?



