AC日記 codevs 1688 求逆序對

2022-05-14 18:39:48 字數 1235 閱讀 2179

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題解檢視執行結果

給定乙個序列a1,a2,…,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目

資料範圍:n<=105。ai<=105。時間限制為1s。

輸入描述 input description

第一行為n,表示序列長度,接下來的n行,第i+1行表示序列中的第i個數。

輸出描述 output description

所有逆序對總數.

樣例輸入 sample input

樣例輸出 sample output

資料範圍及提示 data size & hint

思路:經歷了這麼多的演算法和結構

唯獨沒碰到過歸併排序

今天整理考試題目

猛然發現有乙個題需要用歸併排序來求逆序對

所以現在拿個水題練練手

因為沒有接觸過歸併排序

只知道歸併排序要用遞迴來寫

所以自己摸索著寫還是很吃力

但我還是很頑強的寫了出來

歸併排序

首先定義變數l,r

然後二分

二分到l==r就return

接下來就是排序

mid=(l+r)/2

把l到r分成兩段

以mid為分界線

然後定義乙個用於儲存排序後的序列的陣列

定義兩個記錄兩個區間排序情況的指標lik,rik

if(a[lik]<=a[rik]) b[++now]=a[lik];

就這樣直到lik==mid,rik==r

然後b陣列已經賦值的部分排序到a陣列相應的區間內

然後在排序的同時記錄逆序對的個數即可

來,上**:

#includeusing

namespace

std;

int n,a[100001],b[100001

];unsigned

long

long

int ans=0

;void nxd(int l,int

r)

else b[++now]=a[rik++];

}else

else}}

for(int i=l;i<=r;i++) a[i]=b[i];

}int

main()

CODEVS 1688 求逆序對

題目描述 description 給定乙個序列a1,a2,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目 資料範圍 n 10 5。ai 10 5。時間限制為1s。輸入描述 input description 第一行為n,表示序列長度,接下來的n行,第i 1行表示序列中的第i個數。輸出描述...

CodeVS1688 求逆序對

給定乙個序列a1,a2,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目 第一行為n,表示序列長度,接下來的n行,第i 1行表示序列中的第i個數。所有逆序對總數.資料範圍 n 105。ai 105。時間限制為1s。歸併排序,合併的時候,如果a i a j 那麼a i mid a j 所以給...

codevs1688 求逆序對 權值線段樹

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 給定乙個序列a1,a2,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目 資料範圍 n 105。ai 105。時間限制為1s。輸入描述 input description 第一行為n,表示序列長度,接下來...