結果
| 問題 |
No.1604 Swap Sort:ONE
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-02-03 11:42:09 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 2,000 ms |
| コード長 | 1,154 bytes |
| コンパイル時間 | 1,900 ms |
| コンパイル使用メモリ | 166,928 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-11 09:45:10 |
| 合計ジャッジ時間 | 2,383 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int getSum(int BITree[], int index) {
int sum = 0;
index++;
while(index > 0) {
sum += BITree[index];
index -= index & (-index);
}
return sum;
}
void updateBIT(int BITree[], int n, int index, int val) {
index++;
while(index <= n) {
BITree[index] += val;
index += index & (-index);
}
}
int *constructBITree(int arr[], int n) {
int *BITree = new int[n+1];
for(int i=1;i<=n;i++) BITree[i] = 0;
for(int i=0;i<n;i++) updateBIT(BITree, n, i, arr[i]);
return BITree;
}
int getInvCount(int arr[], int n) {
int invcount = 0;
int maxElement = 0;
for(int i=0;i<n;i++) {
if(maxElement < arr[i]) maxElement = arr[i];
}
int BIT[maxElement+1];
for(int i=1;i<=maxElement;i++) {
BIT[i] = 0;
}
for(int i=n-1;i>=0;i--) {
invcount += getSum(BIT, arr[i]-1);
updateBIT(BIT, maxElement, arr[i], 1);
}
return invcount;
}
int main() {
int n;
cin >> n;
int p[n];
for(int i=0;i<n;i++) cin >> p[i];
cout << getInvCount(p, n) << endl;
return 0;
}