結果
問題 | No.2382 Amidakuji M |
ユーザー | ikoma |
提出日時 | 2023-07-14 22:11:58 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 178 ms / 2,000 ms |
コード長 | 908 bytes |
コンパイル時間 | 202 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 106,496 KB |
最終ジャッジ日時 | 2024-09-16 07:15:01 |
合計ジャッジ時間 | 3,035 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
import sys input = sys.stdin.readline class BIT: def __init__(self, n): self.size = n self.bit = [0] * (n + 1) def sum(self, i): # [0,i] i+=1 s = 0 while i > 0: s += self.bit[i] i -= i & -i return s def sumrange(self, i, j): # [i,j) return self.sum(j-1) - self.sum(i-1) def add(self, i, x): if x==0:return i+=1 while i <= self.size: self.bit[i] += x i += i & -i def inversion_number(A): bit = BIT(max(A)+1) ans = 0 for i, a in enumerate(A): bit.add(a, 1) ans += i + 1 - bit.sum(a) return ans N,M=map(int,input().split()) P=list(map(int,input().split())) n = inversion_number(P) # n + 偶数回 == M*a となる最小のMa if n%2==1 and M%2==0: print(-1) else: m = (n+M-1)//M*M if n%2 != m%2: m+=M print(m)