#aBC330G. [ABC330G] Inversion Squared

[ABC330G] Inversion Squared

AT_abc330_g [ABC330G] Inversion Squared

题目描述

给定一个长度为 NN 的数列 A=(A1,,AN)A = (A_1, \ldots, A_N)AA 的每个元素要么是 1-1,要么是 11NN 之间的整数,并且 11NN 的每个整数在 AA 中最多出现一次。

对于 11NN 的一个排列 P=(P1,,PN)P = (P_1, \ldots, P_N),如果满足 Ai1Pi=AiA_i \neq -1 \Rightarrow P_i = A_i,则称 PP良好排列。请你求出所有良好排列的逆序数的平方和,并对 998244353998244353 取模。

排列 PP 的逆序数定义为满足 1i<jN1 \leq i < j \leq NPi>PjP_i > P_j 的整数对 (i,j)(i, j) 的个数。

输入格式

输入从标准输入读入,格式如下:

NN A1A_1 A2A_2 \ldots ANA_N

输出格式

输出答案。

输入输出样例 #1

输入 #1

4
3 -1 2 -1

输出 #1

29

输入输出样例 #2

输入 #2

10
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

输出 #2

952235647

输入输出样例 #3

输入 #3

15
-1 -1 10 -1 -1 -1 2 -1 -1 3 -1 -1 -1 -1 1

输出 #3

460544744

说明/提示

限制条件

  • 1N30001 \leq N \leq 3000
  • 1AiN1 \leq A_i \leq NAi=1A_i = -1
  • AA1,,N1, \ldots, N 每个数最多出现一次
  • 输入均为整数

样例解释 1

良好排列有 P=(3,1,2,4)P = (3, 1, 2, 4)P=(3,4,2,1)P = (3, 4, 2, 1)22 个,逆序数分别为 2255。因此答案为 22+52=292^2 + 5^2 = 29

样例解释 3

请对 998244353998244353 取模后输出答案。

由 ChatGPT 4.1 翻译