Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef pair<int,int> pi;
- #define F first
- #define S second
- #define PB push_back
- #define MP make_pair
- #define REP(i,a,b) for (int i=a;i<=b;i++)
- #define PER(i,a,b) for (int i=a;i>=b;i--)
- pair<ll,int> solve(int k, vector<int> a) {
- if (k==1) return (make_pair(max(a[0], a[1])*2, max(a[0], a[1])));
- vector<int> left;
- vector<int> right;
- int step = 2;
- int i = 2;
- while (step < (1<<k)) {
- for (int j=1; j<=step; j++) {
- left.push_back(a[i]);
- i++;
- }
- for (int j=1; j<=step; j++) {
- right.push_back(a[i]);
- i++;
- }
- step=step*2;
- }
- // cout<<left.size()<<' ';
- // cout<<right.size()<<endl;
- // cout<<"WTF"<<endl;
- pair<ll,int> ans_left, ans_right;
- ans_left = solve(k-1, left);
- ans_right = solve(k-1, right);
- pair<ll,int> ans;
- int x = max(a[0] + ans_left.S, a[1] + ans_right.S);
- ans.F = ans_left.F + ans_right.F + x - ans_left.S + x - ans_right.S;
- ans.S = x;
- return(ans);
- }
- int main()
- {
- ios::sync_with_stdio(0);
- cin.tie(0);
- int k;
- cin>>k;
- int e;
- e = (1<<(k+1))-2;
- vector<int> a;
- for (int i=0; i<e; i++) {
- int c;
- cin>>c;
- a.push_back(c);
- }
- cout<<solve(k, a).F;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement