题目链接:
https://ac.nowcoder.com/acm/contest/8564/A
注意判断时巧妙得操作
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1e6+10;
ll a[N],d[N];
int v[N];
struct Node{
ll d;
int v;
}node[N];
bool cmp1(Node n1,Node n2){
if(n1.v == n2.v) return n1.d < n2.d;
else return n1.v > n2.v;
}
bool cmp(ll a,ll b){
return a > b;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,m,i;
cin>>n>>m;
for(i=0;i<n;i++)cin>>a[i];
for(i=0;i<m;i++)cin>>node[i].d;
for(i=0;i<m;i++)cin>>node[i].v;
sort(node,node+m,cmp1);
sort(a,a+n,cmp);
int j = 0;
int ans = 0;
for(i = 0;i < n;){
if(j == m){
break;
}
if(node[j].v <= 0){
break;
}
if(a[i] > node[j].d){
ans += node[j].v;
i++;
}
else{
j++;
}
}
cout<< ans << "\n";
return 0;
}