結果
問題 | No.2250 Split Permutation |
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
N=int(input())A=list(map(int, input().split()))mod=998244353B=A.copy()def mergecount(A):cnt = 0n = len(A)if n>1:A1 = A[:n>>1]A2 = A[n>>1:]cnt += mergecount(A1)cnt += mergecount(A2)i1=0i2=0for i in range(n):if i2 == len(A2):A[i] = A1[i1]i1 += 1elif i1 == len(A1):A[i] = A2[i2]i2 += 1elif A1[i1] <= A2[i2]:A[i] = A1[i1]i1 += 1else:A[i] = A2[i2]i2 += 1cnt += n//2 - i1return cntal=mergecount(B)*(pow(2,N-1,mod))al%=modclass Bit:def __init__(self, size):self.data = [0] * (size + 1)self.size = size#i: index(0-index)までの和def sum(self, i):i+=2s = 0while i > 0:s += self.data[i]i -= i & -ireturn sdef add(self, i, x):i += 2while i <= self.size:self.data[i] += xi += i & -iC=[1]for i in range(N):c=C[-1]*2c%=modC.append(c)bit=Bit(N+10)ans=0for i in range(N):a=A[i]d=bit.sum(N+1)-bit.sum(a)d%=modans=ans*2+dans%=modbit.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)