日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

E - 数据结构实验之排序五:归并求逆序数

發布時間:2025/3/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 E - 数据结构实验之排序五:归并求逆序数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

對于數列a1,a2,a3…中的任意兩個數ai,aj (i < j),如果ai > aj,那么我們就說這兩個數構成了一個逆序對;在一個數列中逆序對的總數稱之為逆序數,如數列 1 6 3 7 2 4 9中,(6,4)是一個逆序對,同樣還有(3,2),(7,4),(6,2),(6,3)等等,你的任務是對給定的數列求出數列的逆序數。
Input

輸入數據N(N <= 100000)表示數列中元素的個數,隨后輸入N個正整數,數字間以空格間隔。

Output

輸出逆序數。
Sample
Input

10 10 9 8 7 6 5 4 3 2 1

Output

45 #include<bits/stdc++.h>#define ll long longusing namespace std;const int N = 1e5 + 10; int a[N], temp[N]; ll sum; void merage(int left, int right) {int mid = (left + right) / 2;int i = left, j = mid + 1, k = 0;while(i <= mid && j <= right){if(a[i] <= a[j])temp[k++] = a[i++];else{temp[k++] = a[j++];sum += (mid - i + 1);}}while(i <= mid)temp[k++] = a[i++];while(j <= right)temp[k++] = a[j++];for(i = 0, j = left; i < k; i++, j++)a[j] = temp[i]; } void meragesort(int left, int right) {if(left < right){int mid = (left + right) / 2;meragesort(left, mid);meragesort(mid + 1, right);merage(left, right);} } int main() {ios::sync_with_stdio(0);int n;cin >> n;for(int i = 0; i < n; i++)cin >> a[i];sum = 0;meragesort(0, n - 1);cout << sum << endl;return 0; }

總結

以上是生活随笔為你收集整理的E - 数据结构实验之排序五:归并求逆序数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。