Advertisement
Anon2005

2

Feb 4th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #ifndef HOME
  3. #pragma GCC optimize("unroll-loops")
  4. #pragma GCC optimize("Ofast")
  5. #pragma GCC target("avx")
  6. #endif
  7. using namespace std;
  8. long long n,k,a,b;
  9. long long v[100001];
  10. long long cautbin(long long poz)
  11. {
  12. long long r=0,pas=1<<20;
  13. while(pas)
  14. {
  15. if(r+pas<=k&&v[r+pas]<=poz)
  16. r+=pas;
  17. pas>>=1;
  18. }
  19. return r;
  20. }
  21. long long destroy(long long st,long long dr)
  22. {
  23. long long x=cautbin(st-1),y=cautbin(dr);
  24. long long na=y-x;
  25. if(na==0)
  26. return na;
  27. return na*1LL*b*1LL*(dr-st+1);
  28. }
  29. long long rez(long long st,long long dr)
  30. {
  31. long long val;
  32. if(destroy(st,dr)==0)
  33. val=a;
  34. else
  35. val=destroy(st,dr);
  36. if(st==dr)
  37. return val;
  38. return min(rez(st,(st+dr)/2)+rez((st+dr)/2+1,dr),val);
  39. }
  40. int main()
  41. {
  42. ios::sync_with_stdio(0);
  43. cin.tie(0);
  44. cout.tie(0);
  45. #ifdef HOME
  46. freopen("test.in","r",stdin);
  47. freopen("test.out","w",stdout);
  48. #endif
  49. cin>>n>>k>>a>>b;
  50. for(long long i=1; i<=k; i++)
  51. cin>>v[i];
  52. sort(v+1,v+k+1);
  53. cout<<rez(1,(1<<n));
  54. return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement