97pts 原因

P4694 [PA2013] Raper

@[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


|