WA on 02_hand_11.txt
有人知道是什么原因吗?/bx
代码如下:
#include<bits/stdc++.h>
//#define LOCAL
#define sf scanf
#define pf printf
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
typedef long long ll;
const int N=2e5+7;
int n,m;
ll k,a[N],b[N],c[N];
ll sum;
bool check(int i,int x,ll g) {
int d=n-m+1-(x>=n-m+1?1:0);
ll res=k-g;
int y=upper_bound(a+1,a+n+1,b[i]+g)-a-1;
if(y<d) return 0;
ll s=c[y]-c[d-1]-(x>=d&&x<=y?b[i]:0);
res-=1ll*(y-d+1-(x>=d&&x<=y?1:0))*(b[i]+g+1)-s;
return res<0;
}
int main() {
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("my.out","w",stdout);
#endif
sf("%d%d%lld",&n,&m,&k);
rep(i,1,n) {
sf("%lld",&a[i]);k-=a[i];b[i]=a[i];
}
sort(a+1,a+n+1);
rep(i,1,n) c[i]=c[i-1]+a[i];
rep(i,1,n) {
int x=lower_bound(a+1,a+n+1,b[i])-a;
// pf("%d\n",x);
ll l=0,r=k+1;
while(l<r) {
ll mid=(l+r)>>1;
if(check(i,x,mid)) r=mid;
else l=mid+1;
}
if(r<=k) pf("%lld ",r);
else pf("-1 ");
}
}