版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37404150/article/details/78522158
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#define INF 0x3fffffff
const int maxn=5000+10;
using namespace std;
typedef long long ll;
struct node{
int c,v,no;
}b[maxn];
struct node1{
int ans,no,c;
}a[maxn];
bool cmp1(node1 a,node1 b){
return a.c>b.c;
}
bool cmp2(node a,node b){
if(a.v!=b.v) return a.v<b.v;
return a.c>b.c;
}
bool ccmp(node1 a,node1 b){
return a.no<b.no;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d",&a[i].c);//部门人数
a[i].no=i+1;
a[i].ans=0;
}
for(int i=0;i<m;i++){
scanf("%d",&b[i].c);//房子容量
b[i].no=i+1;
}
for(int i=0;i<m;i++){
scanf("%d",&b[i].v);//房子价格
}
sort(b,b+m,cmp2);
sort(a,a+n,cmp1);
/*for(int i=0;i<m;i++){
cout<<b[i].c<<" "<<b[i].v<<" "<<b[i].no<<endl;
}*/
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(b[i].c>=a[j].c){
a[j].ans=b[i].no;
a[j].c=INF;
b[i].v=INF;
break;
}
}
}
int flag=1;
for(int i=0;i<n;i++){
if(a[i].ans==0) flag=0;
}
if(flag==1){
sort(a,a+n,ccmp);
for(int i=0;i<n-1;i++){
printf("%d ",a[i].ans);
}
printf("%d\n",a[n-1].ans);
}
else printf("impossible\n");
return 0;
}