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;
}


目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 监控
智能的三重境界:从感知、认知到决策的进化
智能的三重境界:从感知、认知到决策的进化
793 121
|
5月前
|
传感器 人工智能 算法
数字孪生智慧水务系统,三维立体平台,沃思智能
智慧水务系统融合物联网、数字孪生与AI技术,实现供水全流程智能监测、预测性维护与动态优化。通过实时数据采集与三维建模,提升漏损控制、节能降耗与应急响应能力,推动水务管理从经验驱动迈向数据驱动,助力城市水资源精细化、可持续化管理。
828 143
|
5月前
|
移动开发 小程序 JavaScript
uniapp
uniapp
876 130
|
8月前
|
JSON 文件存储 数据安全/隐私保护
微博超话自动签到神器, 微博自动签到神器app,贴吧微博签到脚本工具助手
核心模块包含超话列表获取和签到功能‌2使用配置文件存储cookies避免硬编码‌1
|
5月前
|
存储 前端开发
【实战案例】火语言 RPA 采集小说站已完结书名(自动翻页判断),保存到Excel 全流程(附完整脚本)
自动采集起点中文网完本小说书名,支持翻页检测与数据存储。脚本逐页抓取小说名并保存至Excel,最多采集50页,智能判断翻页逻辑,确保数据完整,适用于批量获取完结书籍信息。
317 5
|
7月前
|
安全 Windows 内存技术
应用程序无法正常启动(0xc0000185)怎么解决?
遇到应用程序无法正常启动并显示错误代码0xc0000185时,可以尝试以下解决方法
|
Ubuntu Shell Linux
pyenv 管理多个 Python 版本(1)
pyenv 管理多个 Python 版本(1)
554 86
pyenv 管理多个 Python 版本(1)
|
机器学习/深度学习 自然语言处理
《机器学习调优指南:随机搜索与网格搜索的优劣剖析》
在机器学习中,超参数调优至关重要。网格搜索和随机搜索是两种常用方法。网格搜索通过穷举所有超参数组合,确保找到全局最优解,具有全面性和可解释性强的优点,但计算成本高昂、效率低。随机搜索则从超参数空间中随机抽取组合进行评估,计算效率高且灵活性强,但在结果上存在不确定性和缺乏方向性。两者各有优劣,实际应用中可根据资源和需求选择合适的方法,甚至结合使用以提升模型性能。
627 74
|
存储 Docker 容器
入职必会-开发环境搭建50-Docker必会搭建Docker私有仓库
Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地也可以把我们自己的镜像推送上去。但是有时候我们的服务器无法访问互联网或者不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的Docker私有仓库来存储和管理自己的Docker镜像。
320 1
入职必会-开发环境搭建50-Docker必会搭建Docker私有仓库