歸併排序 逆序對 序列

2021-06-10 08:39:59 字數 1033 閱讀 4165

【題目描述】

生活中,大多數事物都是有序的,因為順序的美是最令人陶醉的。所以現在rcdh看了不順的東西就頭痛。所以他想讓世界變成有序,所以現在rcdh看了不順的東西就頭痛。所以他想讓世界變成有序,可是他只是乙個無名小輩,所以只好對數字序列下手。據他所知序列的混亂程度是由「逆序對」的個數決定,公式是q=2^n,其中q是指混亂程度,n是指這個序列「逆序對」的個數。逆序對是這樣定義的:假設序列中第i個數是ai,若存在iaj,則就為乙個逆序對。你的任務是給定乙個序列,計算其混亂程度q。這個數可能會比較大,你只需輸出qmod1991 的結果。

【輸入格式】

第一行,整數n,表示序列中有n個數。 

第二行,有n個數。 

對於30%的資料

2=對於100%的資料 

2=數列中的每個數不超過10000000的正整數。 

【輸出格式】

僅一行,qmod1991 的值。

【輸入樣例】

41 3 4 2

【輸出樣例】

4這個,求逆序對的裸題。

分治法 先劃分區間 分別求解 最後合併答案

最後求2^k沒有使用快速冪的意義

由於要求q mod c

c為1991 是乙個定值

完全可以找出2^k mod c的迴圈 打乙個小小的表……

**如下

#include #include #include #include #include using namespace std;

int cnt;

int n;

int a[50005];

int t[50005];

const int ans = ;

void init_file()

void merge_sort(int * a, int x, int y,int *t)

} for(int i = x; i < y; i++)

}}void read_data()

void work()

int main()

逆序對 (歸併排序)

逆序對的nlogn方法,改進後的歸併排序 給定排列p,求排列的逆序對數量。p的長度 100000。要求o nlogn 定義歸併排序過程merge l,r merge l,r merge l,mid merge mid 1,r count l,mid,mid 1,r 只需要考慮左右兩段之間造成的逆序對...

歸併排序 逆序對

按照劉汝佳說的,歸併排序分三步 1.劃分問題,即把序列分成元素盡量相等的兩半 2.遞迴求解 3.合併子問題 其實就是把乙個序列不斷的二分,直到只有兩個元素的時候,然後排序,然後返回,再排序。先上 include using namespace std long long a 100005 t 100...

歸併排序(逆序對)

現在我們在競賽中最常用的排序是快速排序,c 只要乙個sort就搞定,但非常明顯,歸併排序的時間複雜度是最優的而且非常穩定,但是人們經常把它用在求逆序對個數上面。那麼下面我用乙個這樣的題來講一下歸併排序。點這裡看題目和樹狀陣列解法。歸併排序是將數列a l,h 分成兩半a l,mid 和a mid 1,...