#1717. 逆序对个数

逆序对个数

题目描述

给定一个长度为 nn 的二进制数组 aa 。你最多只能对它 执行一次 操作。在操作中,您可以选择任何元素并翻转它:将 00 变为 11 ,或者 11 变为 00

在进行最多一次操作后,数组的最大逆序对个数是多少?

逆序对:当下标 i<ji< j 满足 ai>aja_i>a_j ,则称 (i,j)(i,j) 为一组逆序对。

输入格式

第一行输入一个数字 nn ,代表数组长度

紧接着输入 nn 个空格隔开的数字,每个数字要么是 00 ,要么是 11

输出格式

输出最大的逆序对个数

4
1 0 1 0
3
6
0 1 0 0 1 0
7

提示

对于 50%50\% 的数据,1n1021\leq n\leq 10^20ai10\leq a_i \leq 1

对于 100%100\% 的数据,1n21051\leq n\leq 2*10^50ai10\leq a_i \leq 1

对于第一个测试用例,逆序最初由下标 (1,2)(1,2)(1,4)(1,4)(3,4)(3,4) 组成,总共为 33 ,这已经是最大值。

对于第二个测试用例,逆序最初由下标 (2,3)(2,3)(2,4)(2,4)(2,6)(2,6)(5,6)(5,6) 构成,共 44 个。但是,通过翻转第一个元素,数组变成 1 1 0 0 1 0 ,它的逆序是由下标 (1,3)(1,3)(1,4)(1,4)(1,6)(1,6)(2,3)(2,3)(2,4)(2,4)(2,6)(2,6)(5,6)(5,6) 组成的,总共是 77 个逆序,这是可能的最大值。