ABC_E WA 一个点求调
  • 板块学术版
  • 楼主liyixin0514
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/9/28 21:44
  • 上次更新2024/9/29 11:27:02
查看原帖
ABC_E WA 一个点求调
542128
liyixin0514楼主2024/9/28 21:44

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 ");
	}
}
2024/9/28 21:44
加载中...