問題一覧 > 通常問題

No.2250 Split Permutation

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

問題文

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

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

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

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

入力

$N$
$P_1\ P_2\ \ldots\ P_N$

  • $1\le N\le 2×10^5$
  • $1\le P_i\le N$
  • $i \neq j$ ならば $P_i \neq P_j$
  • 入力は全て整数

出力

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

サンプル

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

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

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

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

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

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

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

どのように分割しても $P'$ の転倒数は $0$ です。

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

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