题目链接:
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
ll n,k,A,B;
ll mi2[35];
ll a[maxn];
ll Search (ll l,ll r)
{
ll t=upper_bound(a,a+k,r)-(lower_bound(a,a+k,l));
if(t==0) return A;
ll len=r-l+1;
ll cho1,cho2;
cho1=len*t*B;
if(l!=r)
{
ll mid=(l+r)/2;
cho2=Search(l,mid)+Search(mid+1,r);
return min(cho1,cho2);
}
else return cho1;
}
int main()
{
mi2[0]=1;
for (int i=1;i<=30;i++) mi2[i]=mi2[i-1]*2;
memset (a,0,sizeof(a));
scanf("%lld%lld%lld%lld",&n,&k,&A,&B);
for (int i=0;i<k;i++) scanf("%lld",&a[i]);
sort(a,a+k);
ll ans=Search(1,mi2[n]);
printf("%lld\n",ans);
return 0;
}