#include <iostream>
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
const int N=100009;
struct node{
int d,p;
friend bool operator <(const node &a,const node &b){
return a.p>b.p;//小顶堆,
}
}r[N];
bool cmp(node a,node b){
return a.d>b.d;
}
priority_queue<node> q;
int b[N],n,m;
int main(){
while(scanf("%d%d",&n,&m)==2){
while(!q.empty())q.pop();
for(int i=0;i<n;i++) scanf("%d",b+i);
for(int i=0;i<m;i++)scanf("%d",&r[i].d);
for(int i=0;i<m;i++){
scanf("%d",&r[i].p);
}
long long ans=0;
sort(b,b+n);
sort(r,r+m,cmp);
//for(int i=0;i<n;i++)cout<<b[i]<<endl;
int cnt=0;
bool flag=true;
for(int i=n-1;i>=0;i--){
while(cnt<m&& r[cnt].d>=b[i]){//符合条件的才要
q.push(r[cnt]);cnt++;
}
if(q.empty()){
flag=false;break;
}
ans+=q.top().p;
q.pop();//每种箭只能使用一次
}
if(!flag)cout<<"No"<<endl;
else cout<<ans<<endl;
}
return 0;
}
hdu4544湫湫系列故事——消灭兔子 priority queue
最新推荐文章于 2019-03-08 21:11:23 发布