結果
問題 |
No.2382 Amidakuji M
|
ユーザー |
![]() |
提出日時 | 2025-03-03 02:13:57 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 199 ms / 2,000 ms |
コード長 | 1,000 bytes |
コンパイル時間 | 432 ms |
コンパイル使用メモリ | 82,664 KB |
実行使用メモリ | 109,896 KB |
最終ジャッジ日時 | 2025-03-03 02:14:01 |
合計ジャッジ時間 | 4,118 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 19 |
ソースコード
class BIT: def __init__(self, A): self.size = len(A) self.bit = [0]*(len(A)+1) for i in range(len(A)): self.add(i, A[i]) def sum(self, i): i += 1 ans = 0 while i > 0: ans += self.bit[i] i -= -i&i return ans def query(self, l, r): if l == 0: return self.sum(r-1) else: return self.sum(r-1)-self.sum(l-1) def add(self, i, x): i += 1 while i <= self.size: self.bit[i] += x i += -i&i N, M = map(int, input().split()) P = list(map(int, input().split())) cnt = 0 B = BIT([0]*N) for p in P: p -= 1 if p+1 < N: cnt += B.query(p+1, N) B.add(p, 1) if M%2 == 0 and cnt%2 == 1: print(-1) else: if cnt == 0: print(0) elif cnt%M == 0: print(cnt) else: c = (cnt+M)-cnt%M if c%2 == cnt%2: print(c) else: print(c+M)