D - Shipping Center (atcoder.jp)
题意:
思路:
经典中的经典,二维属性,对于其中的一个关键字排序,然后双指针将合法的可行解放入容器中,再去容器中找最优解,用双指针是因为它具有单调性
这里的最优解就是找出体积第一个>=它的,然后匹配
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=2e3+10;
const int mxe=1e6+10;
const int mod=1e9+7;
const int Inf=1e18;
struct ty{
int w,v;
}a[mxn];
int N,M,Q,l,r;
int x[mxn];
bool cmp(ty x,ty y){
if(x.v==y.v) return x.w>y.w;
return x.v>y.v;
}
void solve(){
cin>>N>>M>>Q;
for(int i=1;i<=N;i++) cin>>a[i].w>>a[i].v;
for(int i=1;i<=M;i++) cin>>x[i];
sort(a+1,a+1+N,cmp);
while(Q--){
cin>>l>>r;
multiset<int> S;
for(int i=1;i<=M;i++){
if(i<l||i>r) S.insert(x[i]);
}
int ans=0;
for(int i=1;i<=N;i++){
auto it=S.lower_bound(a[i].w);
if(it!=S.end()){
ans+=a[i].v;
S.erase(it);
}
}
cout<<ans<<'\n';
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;//cin>>__;
while(__--)solve();return 0;
}