题解:P4694 [PA 2013] Raper
LastKismet · · 题解
Sol
WQS 二分套反贪。
考虑如果没有光盘张数限制,那么就是一个经典的反贪问题(我知道一个都不选最优,请先忽略这一点……),在
如何处理限制呢?很典型的 WQS 二分啊。记
WQS 二分时有几个坑点,一个是典型的要处理好多点共线的情况,我这里设定要最小化选的个数,那么对于两个代价相同的选择,就要优先选不会更加点数的选项(也就是优先反悔)。如果要最大化选的个数同理。最后消除
Code
int n,k;
ll a[N],b[N];
inline pli check(ll dlt){
ll res=0;int cnt=0;
lrheap<pli> pq;
rep(i,1,n){
pq.push({a[i],1});
if(dlt+b[i]+pq.top().fir<0){
res+=dlt+b[i]+pq.top().fir;
cnt+=pq.top().sec;
pq.pop();
pq.push({-dlt-b[i],0});
}
}
return {res,cnt};
}
inline void Main(){
read(n,k);
rep(i,1,n)read(a[i]);
rep(i,1,n)read(b[i]);
ll l=-2e9,r=0;
while(l<r){
ll m=l+r>>1;
if(check(m).sec<=k)r=m;
else l=m+1;
}
put(check(l).fir-k*l);
}