题意:给定一个数组,可以选择将其中元素取反,问逆序对最多是多少。
一个比较有意思的题。
在读入的时候 a 都取正数。我们考虑其中的最大值 a [ i ]
(1)如果 a [ i ] 为正的时候,前面的数不管是否取反都比他小,不会产生逆序对。后面的数不管是否取反也都比他小,会产生 n - i + 1 个逆序对。
(2)如果 a [ i ] 取负的时候,前面的数不管是否取反都比他大,产生 i - 1 个逆序对。后面的数不管是否取反也都比他大,不产生逆序对。
我们发现除了最大值之外的所有数是否取反与最大值是否取反没有关系。那么对于次大值 次次大值…这些是否有这个性质呢?显然是有的。因为我们知道最大数的取法于其他数没关系,那么其他数取法也于最大数没关系。显然可以递推下去。
数据比较小可以 O ( n 2 ) O(n^2) O(n2)跑过去,当然可以用权值线段树优化成 O ( N l o g N ) O(NlogN) O(NlogN),懒得写了。