逆序數對 (常規)

2021-06-11 17:30:29 字數 691 閱讀 8523

求下列數列中逆序數對最少的乙個,並求出逆序數對數量?(n <= 5000)

a1, a2, ..., an-1, an

a2, a3, ..., an, a1

a3, a4, ..., an, a1, a2

...an, a1, a2, ..., an-1 

#pragma warning (disable:4786)  

#include#includeusing namespace std;

#define max 5000

int arr[max + 10];

int main()

//常規 n^2 方法求逆序數對

int count = 0;

for(i = 0; i < n; i ++)

}//求出將每一位數移動到最後時較前乙個陣列的逆序數對數量改變值

int c1, c2,min = count;

for( i =0; i < n; i ++ )

for( j = i + 1; j < n; j ++ )

count = count + c2 - c1;

if( count < min )

min = count;

}printf("%d\n", min );

}return 0;

}

求逆序數對

題意 給出長度為n的序列,每次只能交換相鄰的兩個元素,問至少要交換幾次才使得該序列為遞增序列。1.先對輸入的陣列離散化,使得各個元素比較接近,而不是離散的 a的操作就是離散化 2.接著,運用樹狀陣列的標準操作來累計陣列的逆序數。include iostream include cstdio incl...

樹狀陣列求逆序對(逆序數)

逆序數 也叫逆序對 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。無重複的數 include include include include include include using namespace...

HDU 4944 逆序數對

題意 給出乙個序列,可以相鄰的交換k次,求 k 次之後,逆序數對最少是多少 分析 可以發現,無論怎麼交換之後,總共的逆序數對只會 1,那麼結果就是,將這個序列排整齊時,要兩兩交換的次數 k 題目就轉換為求這個序列的逆序數對有多少 這樣的兩兩交換好像是氣泡排序,氣泡排序是o n 2 正確解法是歸併排序...