提交时间:2025-10-15 19:02:39

运行 ID: 38528

#include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,a,cf,cm,m,ans,c[100005],sc[100005],hc[100005]; bool check(ll m,ll w,ll ni){ //if(w>c[n])return 1; ll nw=min(1ll*(upper_bound(c+1,c+n+1,w)-c-1),ni-1); ll ans = nw*w-sc[nw]; //printf("%lld %lld %lld %lld\n\n",m,w,nw,ans); return ans >m; } int main(){ //freopen("myth.in","r",stdin); //freopen("myth.out","w",stdout); scanf("%lld%lld%lld%lld%lld",&n,&a,&cf,&cm,&m); for(int i = 1;i<=n;i++) scanf("%lld",&c[i]); c[n+1]=1e9; sort(c+1,c+n+1); for(int i = 1;i<=n;i++)sc[i]=sc[i-1]+c[i]; for(int i = n;i>=1;i--)hc[i]=hc[i+1]+c[i]; for(int j = 0;j<=n;j++){ ll i=n+1-j; if(a*j-hc[i]>m)break; if(j==n) ans=max(j*cf+a*cm,ans) ; ll nowm=m-a*j+hc[i]; ll l =0 ,r=m; while(l+1<r){ int mid = (l+r)>>1; if(check(nowm,mid,i)) r=mid; else l = mid; } ans = max(ans,j*cf+l*cm); } cout<<ans<<endl; //fclose(stdin); //fclose(stdout); }