Description
定义
F(n,k)
为从
{1,2,...,n}
中选出一个
k
子集,其最小值的期望,给出两个长度为
Input
第一行一整数
m
表示序列长度,之后输入
Output
输出 A′ 序列
Sample Input
5
7 3 5 3 4
2 1 3 2 3
Sample Output
4 7 3 5 3
Solution
显然对于固定的
k
,
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=200005;
int m,a[maxn],ans[maxn];
struct node
{
int val,id;
bool operator<(const node &a)const
{
if(a.val!=val)return val>a.val;
return id<a.id;
}
}b[maxn];
int main()
{
while(~scanf("%d",&m))
{
for(int i=1;i<=m;i++)scanf("%d",&a[i]);
sort(a+1,a+m+1);
for(int i=1;i<=m;i++)scanf("%d",&b[i].val),b[i].id=i;
sort(b+1,b+m+1);
for(int i=1;i<=m;i++)ans[b[i].id]=a[i];
for(int i=1;i<=m;i++)printf("%d%c",ans[i],i==m?'\n':' ');
}
return 0;
}