Advertisement
Anon2005

1

Feb 4th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #ifndef HOME
  3. #pragma GCC optimize("unroll-loops")
  4. #pragma GCC target("avx")
  5. #pragma GCC optimize("Ofast")
  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. int r=0,pas=1<<16;
  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 a;
  27. return na*1LL*b*1LL*(dr-st+1);
  28. }
  29. long long rez(long long st,long long dr)
  30. {
  31. if(destroy(st,dr)==a)
  32. return a;
  33. if(st==dr)
  34. return destroy(st,dr);
  35. return min(rez(st,(st+dr)/2)+rez((st+dr)/2+1,dr),destroy(st,dr));
  36. }
  37. int main()
  38. {
  39. ios::sync_with_stdio(0);
  40. cin.tie(0);
  41. cout.tie(0);
  42. #ifdef HOME
  43. freopen("test.in","r",stdin);
  44. freopen("test.out","w",stdout);
  45. #endif
  46. cin>>n>>k>>a>>b;
  47. for(long long i=1; i<=k; i++)
  48. cin>>v[i];
  49. sort(v+1,v+k+1);
  50. cout<<rez(1,(1LL<<n));
  51. return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement