#P15458. 【MX-X25-T2】『FeOI-5』2 的次幂

【MX-X25-T2】『FeOI-5』2 的次幂

说明

给定一个长 nn 的非负整数序列 aa,你可以进行如下形式的操作任意次:

  1. 选择一个区间 [l,r][l,r]llrr 可以相等);
  2. s=i[l,r]ais=\sum \limits_{i\in [l,r]} a_i,令 kk 为最大的非负整数使得 2ks2^k\le s(若 s=0s=0k=0k=0);
  3. 获得 kk 个金币,并将 a[l,r]a_{[l,r]} 删去。之后 a[1,l1]a_{[1,l-1]}a[r+1,n]a_{[r+1,n]} 会拼接起来,即新的 aa 长度为 nr+l1n-r+l-1

求最多能获得多少个金币。

输入格式

第一行两个整数 c,Tc,T 分别表示测试点所属的子任务编号(样例保证 c=0c=0)和数据组数。

对于每组数据,输入两行:

  • 第一行一个整数 nn

  • 第二行 nn 个整数表示序列 aa

输出格式

对于每组数据,输出一行一个整数表示答案。

0 1
5
3 2 1 1 4
5
0 1
12
1 0 3 2 2 1 4 5 6 8 7 9
19

提示

【样例 1 解释】

第一次操作:选择区间 [2,2][2,2],此时 s=2,k=1s=2,k=1,获得 11 金币,操作后序列变为 3 1 1 4

第二次操作:选择区间 [1,3][1,3],此时 s=5,k=2s=5,k=2,获得 22 金币,操作后序列变为 4

第三次操作:选择区间 [1,1][1,1],此时 s=4,k=2s=4,k=2,获得 22 金币,操作后序列变为空序列;

总共获得 55 金币,可以证明这是能获得的最多金币数。

【数据范围】

对于所有测试数据,1n,n1061\le n,\sum n\le 10^60ai10180\le a_i\le 10^{18}1T1001\le T\le 100

子任务编号 n\sum n 特殊性质 分数
11 5\le 5 55
22 100\le 100 1010
33 106\le 10^6 0ai30\le a_i\le 3
44 i\forall i,不存在 kk 使得 ai=2k1a_i=2^k-1 2020
55 5000\le 5000
66 106\le 10^6 3535