Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef vector<int> vi;
  6. typedef pair<int,int> pi;
  7. #define F first
  8. #define S second
  9. #define PB push_back
  10. #define MP make_pair
  11. #define REP(i,a,b) for (int i=a;i<=b;i++)
  12. #define PER(i,a,b) for (int i=a;i>=b;i--)
  13.  
  14. pair<ll,int> solve(int k, vector<int> a) {
  15. if (k==1) return (make_pair(max(a[0], a[1])*2, max(a[0], a[1])));
  16. vector<int> left;
  17. vector<int> right;
  18. int step = 2;
  19. int i = 2;
  20. while (step < (1<<k)) {
  21. for (int j=1; j<=step; j++) {
  22. left.push_back(a[i]);
  23. i++;
  24. }
  25. for (int j=1; j<=step; j++) {
  26. right.push_back(a[i]);
  27. i++;
  28. }
  29. step=step*2;
  30. }
  31. // cout<<left.size()<<' ';
  32. // cout<<right.size()<<endl;
  33. // cout<<"WTF"<<endl;
  34. pair<ll,int> ans_left, ans_right;
  35. ans_left = solve(k-1, left);
  36. ans_right = solve(k-1, right);
  37. pair<ll,int> ans;
  38. int x = max(a[0] + ans_left.S, a[1] + ans_right.S);
  39. ans.F = ans_left.F + ans_right.F + x - ans_left.S + x - ans_right.S;
  40. ans.S = x;
  41. return(ans);
  42. }
  43.  
  44. int main()
  45. {
  46. ios::sync_with_stdio(0);
  47. cin.tie(0);
  48.  
  49. int k;
  50. cin>>k;
  51. int e;
  52. e = (1<<(k+1))-2;
  53. vector<int> a;
  54. for (int i=0; i<e; i++) {
  55. int c;
  56. cin>>c;
  57. a.push_back(c);
  58. }
  59.  
  60. cout<<solve(k, a).F;
  61.  
  62.  
  63.  
  64.  
  65.  
  66. return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement