結果
| 問題 |
No.1604 Swap Sort:ONE
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2021-04-26 17:52:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 55 ms / 2,000 ms |
| コード長 | 867 bytes |
| コンパイル時間 | 163 ms |
| コンパイル使用メモリ | 82,700 KB |
| 実行使用メモリ | 74,740 KB |
| 最終ジャッジ日時 | 2024-07-06 07:50:19 |
| 合計ジャッジ時間 | 2,633 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
"""
想定解
(数字,index)
を昇順ソート
転倒数を求める
"""
import sys
from sys import stdin
def bitadd(a,w,bit): #aにwを加える
a += 1
x = a
while x <= (len(bit)-1):
bit[x] += w
x += x & (-1 * x)
def bitsum(a,bit): #ind 0~aまでの和を求める
a += 1
ret = 0
x = a
while x > 0:
ret += bit[x]
x -= x & (-1 * x)
return ret
N = int(stdin.readline())
A = list(map(int,stdin.readline().split()))
assert 2 <= N <= 2*(10**5)
B = [A[i] for i in range(N)]
B.sort()
for i in range(N):
assert B[i] == i+1
num_ind = [] #数字、indexを入れておく
for i in range(N):
num_ind.append( (A[i] , i) )
num_ind.sort()
BIT = [0] * (200100)
ans = 0
for i in range(N):
ans += i - bitsum( num_ind[i][1] , BIT )
bitadd( num_ind[i][1]+1 , 1 , BIT)
print (ans)
SPD_9X2