時間限制: 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陣列相應的區間內
然後在排序的同時記錄逆序對的個數即可
來,上**:
#includeusingnamespace
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,表示序列長度,接下來...