90pts求调
  • 板块P9519 pay
  • 楼主MornStar
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/8/13 13:11
  • 上次更新2023/11/3 04:06:51
查看原帖
90pts求调
760824
MornStar楼主2023/8/13 13:11
#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace IO{
	char ibuf[1<<14],*iS,*iT;
#if ONLINE_JUDGE
#define gh() (iS==iT?iT=(iS=ibuf)+fread(ibuf,1,1<<14,stdin),(iS==iT?EOF:*iS++):*iS++)
#else
#define gh() getchar()
#endif
	inline int read(){
		char ch=gh();
		int x=0,f=0;
		while(!isdigit(ch))   f|=(ch=='-'),ch=gh();
		while(isdigit(ch)) x=(x<<3)+(x<<1)+(ch^48),ch=gh();
		return f?-x:x;
	}
	inline void Write(int x){
		if(x>=10)	Write(x/10);
		putchar(x%10+48);
	}
	inline void write(int x,char ch=0){
		if(x<0)	putchar('-'),x=-x;
		Write(x);
		if(ch!=0)	putchar(ch);
	}
}
using IO::read;
using IO::write;
long long n,m,ans,a[1000005],b[1000005],sum[1000005],maxa;
bool check(long long x){
	for(int i=1;i<=n;i++){
		long long l=upper_bound(b+1,b+m+1,i-x)-b,mid=lower_bound(b+1,b+m+1,i)-b,r=lower_bound(b+1,b+m+1,i+x)-b-1;
		long long now=(r-mid+1)*x-(sum[r]-sum[mid-1]-i*(r-mid+1))+(mid-l)*x-((mid-l)*i-(sum[mid-1]+sum[l-1]));
		if(now<a[i])	return 0;
	}
	return 1;
}
signed main(){
	n=read(),m=read();
	for(int i=1;i<=n;i++)	a[i]=read(),maxa=max(maxa,a[i]);
	for(int i=1;i<=m;i++)	b[i]=read();
	sort(b+1,b+m+1);
	for(int i=1;i<=n;i++)	sum[i]=sum[i-1]+b[i];
	long long l=0,r=maxa+n;
	while(l<=r){
		long long mid=(l+r)>>1;
		if(check(mid))	ans=mid,r=mid-1;
		else	l=mid+1;
	}
	write(ans);
}

WA on #5

2023/8/13 13:11
加载中...