4332: 使序列递增

内存限制:128 MB 时间限制:1 S 标准输入输出
题目类型:传统 评测方式:文本比较 上传者:
提交:54 通过:23

题目描述

给你 n 个整数 a1, a2, ... , an 你可以对他们进行如下操作:

  • 你可以选择任意元素 ai (1 <= i <= n) ,用 ai 除 2 的结果(下取整,只保留整数部分)替换它。

你需要找到最小的操作次数,使得序列严格递增(即 a1 < a2 < a3 < ... < an),或者不可能获得这样的序列。

注意元素之间不能交换位置,只能进行上述操作。

输入格式

输入的第一行包含一个整数 t (1 ≤ t ≤ 104) 表示测试用例组数。

测试用例的描述如下。

每个测试用例的第一行包含单个整数 n (1 ≤ n ≤ 30)。

每个测试用例的第二行正好包含 n 个整数 a1,a2, ... , an (0 ≤ ai ≤ 2⋅109)。

输出格式

对于每个测试用例,在单独的一行上打印一个数字表示对序列执行的最小操作数,以使其严格增加。

如果无法获得严格递增的顺序,请打印“-1”。

输入样例 复制

7
3
3 6 5
4
5 3 2 1
5
1 2 3 4 5
1
1000000000
4
2 8 7 5
5
8 26 5 21 10
2
5 14

输出样例 复制

2
-1
0
0
4
11
0

数据范围与提示

对于第一组测试样例:
  • 选择 a2 = 6 将其替换为 [6/2] = 3 ,得到序列为 3, 3, 5;
  • 选择 a1 = 3 将其替换为 [3/2] = 1,得到序列为 1, 3, 5;
     得到严格递增的序列 1 < 3 < 5,所花费操作数为 2。

对于第二组测试样例:
    不可能获得严格递增的序列,输出-1。

对于第三组测试样例:
    已经是严格递增的序列无需操作,输出0。