RT,自己分析的是 O(nlogn+mlogn) 的,但 T 了一大堆。
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int maxn=2e5+5;
struct node{
int l,d;
}a[maxn];
int p[maxn],n,m;
vector<int>v;
long long ans;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&p[i]);
v.push_back(p[i]);
ans+=p[i];
}
sort(v.begin(),v.end());
for(int i=1;i<=m;i++)
scanf("%d",&a[i].l);
for(int i=1;i<=m;i++)
scanf("%d",&a[i].d);
sort(a+1,a+m+1,[](node a,node b){return a.d>b.d;});
for(int i=1;i<=m;i++){
auto pos=lower_bound(v.begin(),v.end(),a[i].l);
if(pos!=v.end()){
ans-=a[i].d;
v.erase(pos);
}
}
printf("%lld",ans);
return 0;
}