給定輸入n,之後輸入1到n的乙個排列,求排列中的逆序對的個數;
思路一:
思路二:
思路二**實現:
#include
#include
#include
using
namespace std;
//歸併,並計算出逆序數的個數
intmerge
(int a,
int s,
int mid,
int e,
int b)
else
}while
(i<=mid)
while
(j<=e)
for(
int i=s;i<=e;i++
) a[i]
= b[i]
;//歸併之後的有序序列存回a
return count;
}//求逆序數
intinversenumber
(int a,
int s,
int e,
int b)
intmain()
分治 求逆序對個數並列印逆序對
如果用最hick的方法去求那麼就是o n 2 的複雜度,如果想優化的話,用歸併排序的方法分治處理。主要思想 總逆序 左邊逆序 右邊逆序 左邊右邊分別排序後的逆序 include includeusing namespace std 用歸併排序的思想來求,歸併排序為o nlogn 的時間複雜度,比暴力...
求逆序對個數(分治)
求逆序對個數 在歸併排序 從大到小 的合併過程前,對兩個分支進行逆序對數的計算 該計算過程為o n include include include define n 100005 using namespace std int a n b n void merge int a,int s,int m...
樹狀陣列 求逆序對個數
樹狀陣列求逆序對其實挺簡單的 1.將要求的陣列離散化 離散化將每乙個數的值變為該數在陣列中的大小 inline bool cmp int x,int y for int i 1 i n i a i read p i i sort p 1,p n 1 cmp for int i 1 i n i a p...