問題一覧 > 通常問題

No.2250 Split Permutation

レベル : / 実行時間制限 : 1ケース 3.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 89
作問者 : bayashiko / テスター : ei1333333 kumakuma
3 ProblemId : 9321 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-03-13 14:19:17

問題文

(1,2,,N)(1,2,\ldots,N) の順列 P=(P1,P2,,PN)P=(P_1,P_2,\ldots,P_N) が与えられます。PP に対して以下の操作を上から順に行い順列 PP' を生成することを考えます。

  • PP00 個以上の仕切りをいれ、いくつかの空でない連続部分列に分割し、左から p1,p2,,pkp_1,p_2,\ldots,p_k とする。
  • p1,p2,,pkp_1,p_2,\ldots,p_k をそれぞれ昇順にソートする。
  • p1,p2,,pkp_1,p_2,\ldots,p_k を左からこの順に結合したものを PP' とする。

例えば P=(5,2,4,3,1)P=(5,2,4,3,1) であるとき、 PP(5,2),(4,3,1)(5,2),(4,3,1) に分割すると、それぞれ昇順にソートされ (2,5),(1,3,4)(2,5),(1,3,4) となるので P=(2,5,1,3,4)P'=(2,5,1,3,4) となります。

PP の分割方法は全部で 2N12^{N-1} 通りありますが、それら全てに対する PP' の転倒数の総和を 998244353998244353 で割った余りを求めてください。

入力

NN
P1 P2  PNP_1\ P_2\ \ldots\ P_N

  • 1N2×1051\le N\le 2×10^5
  • 1PiN1\le P_i\le N
  • iji \neq j ならば PiPjP_i \neq P_j
  • 入力は全て整数

出力

答えを出力してください。

サンプル

サンプル1
入力
3
2 3 1
出力
5

(2,3,1)(2,3,1) と分割した場合、 P=(1,2,3)P'=(1,2,3) となり転倒数は 00 です。

(2,3),(1)(2,3),(1) と分割した場合、 P=(2,3,1)P'=(2,3,1) となり転倒数は 22 です。

(2),(3,1)(2),(3,1) と分割した場合、 P=(2,1,3)P'=(2,1,3) となり転倒数は 11 です。

(2),(3),(1)(2),(3),(1) と分割した場合、 P=(2,3,1)P'=(2,3,1) となり転倒数は 22 です。

よって答えは 0+2+1+2=50+2+1+2=5 です。

サンプル2
入力
6   
1 2 3 4 5 6
出力
0

どのように分割しても PP' の転倒数は 00 です。

サンプル3
入力
9
2 9 6 5 4 1 7 8 3
出力
3838

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。