提交时间:2025-10-15 20:26:53

运行 ID: 38552

#include<bits/stdc++.h> using namespace std; const int N=1e5+5; typedef long long ll; ll n,A,cf,cm,m; ll a[N],h[N],minn[N]; bool cmp(ll x,ll y){ return x>y; } bool check(ll start,ll x,ll sum){ ll l=start,r=n; while(l<r){ ll mid=(l+r)/2; if(a[mid]>=x){ l=mid+1; }else{ r=mid; } } return sum-((n-l+1)*x-h[l])>=0; } int main(){ scanf("%lld %lld %lld %lld %lld",&n,&A,&cf,&cm,&m); memset(minn,0x3f,sizeof(minn)); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } sort(a+1,a+n+1,cmp); h[n]=a[n]; for(int i=n-1;i>=1;i--){ h[i]=h[i+1]+a[i]; } ll ans=0; for(int k=0;k<=n;k++){ //cout<<k<<endl; ll sum=m; sum-=(k*A)-(h[1]-h[k+1]); if(sum<0) break; ll l=a[n],r=A; if(k!=n){ while(l<r){ ll mid=(l+r+1)/2; //cout<<k<<" "<<l<<" "<<r<<" "<<mid<<" "<<check(k+1,mid,sum)<<endl; if(check(k+1,mid,sum)){ l=mid; }else{ r=mid-1; } //cout<<l<<" "<<r<<endl; } }else{ l=A; } if(l==A){ ans=max(ans,n*cf+l*cm); }else{ ans=max(ans,k*cf+l*cm); //cout<<k<<" "<<cf<<" "<<(l-1)<<" "<<cm<<endl; //cout<<ans<<endl; } } cout<<ans<<"\n"; return 0; }