Problem G: 01串

Problem G: 01串

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 128 MiB

Description

给定一个长度为 n01串数组,您可以 至多 对其执行一次操作。在一次操作中,您可以选择任意元素并翻转它:将 0 变为 1 或将 1 变为 0

至多一次 操作后,数组可以拥有的最大 逆序对 数量是多少?


  • 01串数组: 只包含 01 的数组。
  • 逆序对: 数组中满足 i < ja[i] > a[j] 的索引对 (i, j) 的数量。

Input

输入包含多个测试用例。

  • 第一行包含一个整数 t1 ≤ t ≤ 104)— 测试用例的数量。
  • 随后是测试用例的描述。

每个测试用例包含以下两行:

  1. 第一行包含一个整数 n1 ≤ n ≤ 2⋅105)— 数组的长度。
  2. 第二行包含 n 个以空格分隔的正整数 a1, a2, ..., an0 ≤ ai ≤ 1)— 数组的元素。

保证所有测试用例中 n 的总和不超过 2⋅105

Output

对于每个测试用例,输出一个整数 - 数组在执行 最多一次 操作后可以具有的最大逆序数

Sample Input Copy

5
4
1 0 1 0
6
0 1 0 0 1 0
2
0 0
8
1 0 1 1 0 0 0 1
3
1 1 1

Sample Output Copy

3
7
1
13
2

HINT

对于第一个测试案例,逆序对最初由索引对 (1, 2)(1, 4)(3, 4) 形成,总共为 3,这已经是可能的最大值。

对于第二个测试案例,逆序对最初由索引对 (2, 3)(2, 4)(2, 6)(5, 6) 形成,总共为 4。但是,通过翻转第一个元素,数组变为 {1, 1, 0, 0, 1, 0},其逆序对由索引对:

  • (1, 3)
  • (1, 4)
  • (1, 6)
  • (2, 3)
  • (2, 4)
  • (2, 6)
  • (5, 6)

形成,总共为 7 个逆序对,这是可能的最大值。