結果

問題 No.2250 Split Permutation
ユーザー timi
提出日時 2023-03-22 10:05:59
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 384 ms / 3,000 ms
コード長 1,374 bytes
コンパイル時間 293 ms
コンパイル使用メモリ 82,468 KB
実行使用メモリ 110,464 KB
最終ジャッジ日時 2024-09-18 14:48:08
合計ジャッジ時間 6,688 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

N=int(input())
A=list(map(int, input().split()))
mod=998244353
B=A.copy()
def mergecount(A):
cnt = 0
n = len(A)
if n>1:
A1 = A[:n>>1]
A2 = A[n>>1:]
cnt += mergecount(A1)
cnt += mergecount(A2)
i1=0
i2=0
for i in range(n):
if i2 == len(A2):
A[i] = A1[i1]
i1 += 1
elif i1 == len(A1):
A[i] = A2[i2]
i2 += 1
elif A1[i1] <= A2[i2]:
A[i] = A1[i1]
i1 += 1
else:
A[i] = A2[i2]
i2 += 1
cnt += n//2 - i1
return cnt
al=mergecount(B)*(pow(2,N-1,mod))
al%=mod
class Bit:
def __init__(self, size):
self.data = [0] * (size + 1)
self.size = size
#i: index(0-index)
def sum(self, i):
i+=2
s = 0
while i > 0:
s += self.data[i]
i -= i & -i
return s
def add(self, i, x):
i += 2
while i <= self.size:
self.data[i] += x
i += i & -i
C=[1]
for i in range(N):
c=C[-1]*2
c%=mod
C.append(c)
bit=Bit(N+10)
ans=0
for i in range(N):
a=A[i]
d=bit.sum(N+1)-bit.sum(a)
d%=mod
ans=ans*2+d
ans%=mod
bit.add(a,C[i])
#C=[]
#for j in range(N):
# C.append(bit.sum(j+1)-bit.sum(j))
#print(C)
print((al-ans)%mod)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0