Codeforces-1260-E. Tournament贪心

简介: 题意:有n个人,第i个人有力量值i,这n个人中,每次对局两两之间进行solo,如果说一个人的力量之大于他的对手,这个人是赢的,赢得比赛的选手会进入下一轮比赛中。然而里面有一个人为你的朋友,他或许并不是里面最强的人,要想让朋友成为冠军,就需要对必要的人进行贿赂,求出最少需要花费多少才能使得朋友成为冠军。在每次对局中,都可以进行任意的对局安排,对局安排只取决于自己

题目描述:

You are organizing a boxing tournament, where n boxers will participate (n is a power of 2), and your friend is one of them. All boxers have different strength from 1 to n, and boxer i wins in the match against boxer j if and only if i is stronger than j.

The tournament will be organized as follows: n boxers will be divided into pairs; the loser in each pair leaves the tournament, and n2 winners advance to the next stage, where they are divided into pairs again, and the winners in all pairs advance to the next stage, and so on, until only one boxer remains (who is declared the winner).

Your friend really wants to win the tournament, but he may be not the strongest boxer. To help your friend win the tournament, you may bribe his opponents: if your friend is fighting with a boxer you have bribed, your friend wins even if his strength is lower.

Furthermore, during each stage you distribute the boxers into pairs as you wish.

The boxer with strength i can be bribed if you pay him ai dollars. What is the minimum number of dollars you have to spend to make your friend win the tournament, provided that you arrange the boxers into pairs during each stage as you wish?

Input

The first line contains one integer n (2≤n≤218) — the number of boxers. n is a power of 2.

The second line contains n integers a1, a2, …, an, where ai is the number of dollars you have to pay if you want to bribe the boxer with strength i. Exactly one of ai is equal to −1 — it means that the boxer with strength i is your friend. All other values are in the range [1,109].

Output

Print one integer — the minimum number of dollars you have to pay so your friend wins.


Examples


Input

4
3 9 1 -1


Output

0


Input

8
11 -1 13 19 24 7 17 5


Output

12


Note


In the first test case no matter how you will distribute boxers into pairs, your friend is the strongest boxer and anyway wins the tournament.

In the second test case you can distribute boxers as follows (your friend is number 2):

1:2,8:5,7:3,6:4 (boxers 2,8,7 and 6 advance to the next stage);

2:6,8:7 (boxers 2 and 8 advance to the next stage, you have to bribe the boxer with strength 6);

2:8 (you have to bribe the boxer with strength 8);


题意:


有n个人,第i个人有力量值i,这n个人中,每次对局两两之间进行solo,如果说一个人的力量之大于他的对手,这个人是赢的,赢得比赛的选手会进入下一轮比赛中。

然而里面有一个人为你的朋友,他或许并不是里面最强的人,要想让朋友成为冠军,就需要对必要的人进行贿赂,求出最少需要花费多少才能使得朋友成为冠军。在每次对局中,都可以进行任意的对局安排,对局安排只取决于自己


题解:


首先放上qsc学长的B站链接


首先有几个性质:


① 如果说朋友在进行比赛的时候干掉了三个人:

a[p1] a[p2] a[p3] ,那么从贪心的角度来讲,当p1 < p2 < p3的时候,这种情况才是最优的

因为第一个人a[p1] 相比较于a[p2]来讲,更容易死,换句话说就是第二个人更容易活下来,在接下来的对局中就有可能再次被选

② 如果说朋友不是最强的,那么必然要贿赂最后一个人a[n]

因为只要有最后一个人存在,这个人就会阻止朋友成为冠军

③ 在第k轮中,前面的2k - 1个人是不能够选择的,只能够选择后面的半部分,并且在每次中,只能够选择区间内的最小值来办证贪心的最优

(比如在第一次对局中,我可以安排朋友选择任意一个人来进行对局,但是在第二次对局中,我就不能够再次选择1号人物,因为这个人并不能够活到第二次对局,在第一次对局就已经被ko了,不是被自己ko就是被比1强的其他人ko)


Code:


要注意只在二的幂次的时候进行选择

ll a[maxn];
multiset<ll> s;
int main() {
    int n; cin >>n;
    for(int i=1;i<=n;i++) {
        a[i] = read;
    }
    ll sum = 0;
    for(int i = n;i >= 1;i --){
        if(a[i] == -1) break;
        s.insert(a[i]);
        if((i & (i - 1)) == 0){
            sum += *s.begin();
            s.erase(s.begin());
        }
    }
    cout << sum << endl;
    return 0;
}


目录
相关文章
codeforces 272C. Dima and Staircase(线段树)
题目很长,看加猜加谷歌翻译才看懂了题目。每级台阶的宽都是1,但高不同,并且告诉你了,然后给你m个箱子,长和宽都告诉你,把箱子靠左放,求箱子的底部有多高。
29 0
|
人工智能
codeforces455——A. Boredom(线性DP)
codeforces455——A. Boredom(线性DP)
126 0
codeforces455——A. Boredom(线性DP)
HDU7018.Banzhuan(计算几何+贪心)
HDU7018.Banzhuan(计算几何+贪心)
104 0
HDU7018.Banzhuan(计算几何+贪心)
|
人工智能 vr&ar Perl
codeforces1509 C. The Sports Festival (区间DP)
codeforces1509 C. The Sports Festival (区间DP)
109 0
|
数据安全/隐私保护
Codeforces 417D.Cunning Gena (状压DP)
Codeforces 417D.Cunning Gena (状压DP)
83 0
【解题报告】《LeetCode零基础指南》(第七讲) 贪心(2)
【解题报告】《LeetCode零基础指南》(第七讲) 贪心(2)
|
人工智能 算法 BI
【解题报告】《LeetCode零基础指南》(第七讲) 贪心(1)
【解题报告】《LeetCode零基础指南》(第七讲) 贪心(1)
|
人工智能
codeforces1143B Nirvana(贪心)
codeforces1143B题解(贪心)
975 0