@[Youth518](/user/201158) 谢谢!不过为什么我这个是这么写的但还是错了呢?![i](https://xn--9zr.tk/yiw)
```cpp
#include<bits/stdc++.h>
//#define RELEASE
#ifndef RELEASE
// #define FL
#define DB puts("debug")
#endif
using namespace std;
typedef long long ll;
const ll N=500000,K=500000,INF=1000000000000;
int n,k;
ll a[N+10],b[N+10];
inline int read(){
char c=getchar();
int res=0;
bool b=0;
while(c>'9'||c<'0')b=(c=='-'),c=getchar();
while(c>='0'&&c<='9')res=res*10+c-'0',c=getchar();
return b?-res:res;
}
int Calc(const ll &dlt,ll &ans){
// printf("--------------------------------------%lld\n",dlt);
int t=0;
priority_queue<ll> qa,qb;
for(register int i=0;i<n;i++){
qa.push(dlt-a[i]);
if((qb.empty()||qa.top()>=qb.top())&&qa.top()>=b[i])
ans+=qa.top()-b[i],qb.push(b[i]),qa.pop(),t++;
else if(!qb.empty()&&qb.top()>=b[i])
ans+=qb.top()-b[i],qb.pop(),qb.push(b[i]);
// printf("%lld %d\n",ans,t);
}
return t;
}
int main(){
#ifdef FL
freopen("A.in","r",stdin);
#ifndef DB
freopen(".out","w",stdout);
#endif
#endif
n=read(),k=read();
for(register int i=0;i<n;i++)a[i]=read();
for(register int i=0;i<n;i++)b[i]=read();
ll l=-INF,r=INF;
while(l<r){
ll mid=(l+r+1)>>1,ans=0,t=Calc(mid,ans);
if(t==k){
printf("%lld\n",k*mid-ans);
return 0;
}
else if(t>k)r=mid-1;
else l=mid+1;
}
return 0;
}
```
by __OccDreamer__ @ 2021-06-05 22:22:07