No.2250 Split Permutation
タグ : / 解いたユーザー数 90
作問者 : bayashiko / テスター : ei1333333 kumakuma
問題文
$(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もしくは右上の雲マークをクリックしてアカウントを作成してください。