第 1 题 两倍 (double)
时间限制 1.0 s · 空间限制 256 MB · 74 个测试点 · 全文比较(过滤行末空格及文末回车)
本题使用文件输入输出:输入文件 double.in,输出文件 double.out。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
给定一个长度为 N 的正整数序列 A1,A2,…,AN。现在希望将该序列变为升序排列。所谓升序排列,是指对于所有的 i(1≤i≤N−1),都有 Ai≤Ai+1。
为了将序列 A 排成升序,可以对序列执行以下操作若干次(可为零次):
- 对于某个 i(1≤i≤N),将 Ai 乘以 2。
你的任务是以最小的操作次数将序列 A 排成升序,并输出所需的最小操作次数。
输入格式
第一行输入一个整数 N。
第二行输入 N 个整数,表示 A1,A2,…,AN,以空格分隔。
输出格式
输出一个整数,表示将序列变为升序所需的最小操作次数。
样例
样例 1
输入:
输出:
样例 2
输入:
输出:
样例 3
输入:
输出:
提示
样例 1 说明
对 A2 和 A4 各执行两次操作后,序列变为 [3,4,4,4,5]。
样例 2 说明
对 A2 操作两次,A4 操作三次,A5 操作一次,最终序列为 [3,4,5,8,10]。
数据范围
约束条件
- 所有给定的数均为整数。
- 1≤N≤250000
- 1≤Ai≤1000000,其中 1≤i≤N
子问题
- (12 分)对于所有 i(1≤i≤N),Ai=1 或 Ai=2
- (10 分)对于所有 i(1≤i≤N),存在非负整数 ki,使得 Ai=2ki
- (11 分)N≤10
- (19 分)对于所有 i(1≤i≤N),Ai=2 或 Ai=3
- (20 分)对于所有 i(1≤i≤N−1),Ai≥Ai+1
- (28 分)无额外限制条件
翻译由 ChatGPT-4o 完成