- 求逆序对
deeddf
- 2024-8-5 14:58:41 @
#include #include
using namespace std;
typedef vector Data;
int merge_and_count_inversions(const Data &A, const Data &B, Data &C) { int inversions = 0; int i = 0, j = 0; while (i < A.size() && j < B.size()) { if (A[i] <= B[j]) { C.push_back(A[i++]); } else { C.push_back(B[j++]); inversions += A.size() - i; // 统计此次合并导致的逆序对数量 } } while (i < A.size()) { C.push_back(A[i++]); } while (j < B.size()) { C.push_back(B[j++]); } return inversions; }
int count_inversions(const Data &A) { if (A.size() <= 1) return 0; Data B(A.begin() + A.size() / 2, A.end()); Data C; int inversions_left = count_inversions(A.substr(0, A.size() / 2)); int inversions_right = count_inversions(B); int inversions_merged = merge_and_count_inversions(A, B, C); return inversions_left + inversions_right + inversions_merged; }
int main() { Data data = {2, 3, 8, 6, 1}; cout << "数组有逆序对: " << count_inversions(data) << endl; return 0; }
3 条评论
-
陈铭溢 LV 7 @ 2024-8-14 16:16:44
什么玩意
-
2024-8-9 14:48:03@
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
-
2024-8-7 9:06:38@
这种的给个汉堡就老实了
- 1
信息
- ID
- 1029
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 17
- 已通过
- 6
- 上传者