SOJ 27 光榮的夢想

2021-08-28 23:43:46 字數 1636 閱讀 4866

題目描述:

prince 對他在這片大陸上維護的秩序感到滿意,於是決定啟程離開艾澤拉斯。在他動身之前,prince 決定賦予 king_bette 最強大的能量以守護世界、保衛這裡的平衡與和諧。在那個時代,平衡是個夢想。因為有很多奇異的物種擁有各種不穩定的能量,平衡瞬間即被打破。kb 決定求助於你,幫助他完成這個夢想。

一串數列即表示乙個世界的狀態。

平衡是指這串數列以公升序排列,而從一串無序數列到有序數列需要通過交換數列中的元素來實現。kb 的能量只能交換相鄰兩個數字。他想知道他最少需要交換幾次就能使數列有序。

輸入格式:

第一行為數列中數的個數 n

nn(n

nn ≤ 100000

100000

100000

)。第二行為 n

nn 個數 a

1a_1

a1​~a

na_n

an​ (每個數小於 100000

100000

100000

),表示當前數列的狀態。

輸出格式:

輸出乙個整數,表示最少需要交換幾次能達到平衡狀態。

樣例資料:輸入

42 1 4 3 輸出

2 備註:

本題另外一種描述:

給定乙個序列 a

1a_1

a1​,a

2a_2

a2​,…,a

na_n

an​,如果存在 i

i<

j 並且 a

i>aj

a_i>a_j

ai​>aj

​ ,那麼我們稱之為逆序對,求逆序對的數目。

一道逆序對模板題,之前寫過如何用歸併排序求逆序對(不知道怎麼寫的可以戳這裡),現在寫一下如何用樹狀陣列求

大概的思路就是每加入乙個數,就去找之前比它大的數的個數,具體操作如下:

時間複雜度為 o(n∗l

og

nn*log\;n

n∗logn

),和歸併一樣,不過用樹狀陣列的話要好寫一點,還是推薦用樹狀陣列寫

p sps

ps:這道題資料比較溫柔,如果 a

ia_i

ai​ 更大一點(如 109

10^9

109),就要用到離散化

#include

#include

#include

#define n 100005

#define lowbit(x) x&-x

using

namespace std;

int tree[n]

;void

add(

int i,

int x)

}int

sum(

int i)

return ans;

}int

main()

printf

("%lld"

,ans)

;return0;

}

1328 光榮的夢想

prince對他在這片大陸上維護的秩序感到滿意,於是決定啟程離開艾澤拉斯。在他動身之前,prince決定賦予king bette最強大的能量以守護世界 保衛這裡的平衡與和諧。在那個時代,平衡是個夢想。因為有很多奇異的物種擁有各種不穩定的能量,平衡瞬間即被打破。kb決定求助於你,幫助他完成這個夢想。一...

1328 光榮的夢想 分治

時間限制 1000 ms 記憶體限制 65536 kb 提交數 3268 通過數 1968 題目描述 prince對他在這片大陸上維護的秩序感到滿意,於是決定啟程離開艾澤拉斯。在他動身之前,prince決定賦予king bette最強大的能量以守護世界 保衛這裡的平衡與和諧。在那個時代,平衡是個夢想...

xtu p1163 光榮的夢想 樸素法

描述 prince對他在這片大陸上維護的秩序感到滿意,於是決定啟程離開艾澤拉斯。在他動身之前,prince決定賦予king bette最強大的能量以守護世界 保衛這裡的平衡與和諧。在那個時代,平衡是個夢想。因為有很多奇異的物種擁有各種不穩定的能量,平衡瞬間即被打破。kb決定求助於你,幫助他完成這個夢...