Rt,a,b≤3 挂了三个
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 1e5 + 5;
const int Mx = 50 + 5;
#define ll long long
ll n;
ll A , B , s , k[N];
ll ans = 1e18 , pow2[Mx];
inline bool check(ll val , ll mx){
ll sum = 0 , now = 0;
for(int i = 1; i <= n; i++){
k[i] += val;
if(sum + k[i] > 0)
sum += k[i];
else
sum = 0;
now = max(now , sum);
k[i] -= val;
}
if((now * pow2[mx]) >= s)
return 1;
return 0;
}
int main(){
cin >> n >> A >> B >> s;
for(int i = 1; i <= n; i++)
scanf("%lld" , &k[i]);
pow2[0] = 1;
for(int i = 1; i <= Mx - 10; i++)
pow2[i] = pow2[i - 1] << 1;
ll Maxx = ceil(log2(s));
for(int i = 0; i <= Maxx; i++){
ll l = 0 , r = 10000000000;
while(l < r){
ll mid = (l + r) >> 1;
if(check(mid , i))
r = mid;
else
l = mid + 1;
}
ans = min(ans , i * B + l * A);
}
cout << ans;
return 0;
}