Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #ifndef HOME
- #pragma GCC optimize("unroll-loops")
- #pragma GCC optimize("Ofast")
- #pragma GCC target("avx")
- #endif
- using namespace std;
- long long n,k,a,b;
- long long v[100001];
- long long cautbin(long long poz)
- {
- long long r=0,pas=1<<20;
- while(pas)
- {
- if(r+pas<=k&&v[r+pas]<=poz)
- r+=pas;
- pas>>=1;
- }
- return r;
- }
- long long destroy(long long st,long long dr)
- {
- long long x=cautbin(st-1),y=cautbin(dr);
- long long na=y-x;
- if(na==0)
- return na;
- return na*1LL*b*1LL*(dr-st+1);
- }
- long long rez(long long st,long long dr)
- {
- long long val;
- if(destroy(st,dr)==0)
- val=a;
- else
- val=destroy(st,dr);
- if(st==dr)
- return val;
- return min(rez(st,(st+dr)/2)+rez((st+dr)/2+1,dr),val);
- }
- int main()
- {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- #ifdef HOME
- freopen("test.in","r",stdin);
- freopen("test.out","w",stdout);
- #endif
- cin>>n>>k>>a>>b;
- for(long long i=1; i<=k; i++)
- cin>>v[i];
- sort(v+1,v+k+1);
- cout<<rez(1,(1<<n));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement