題目描述:
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決定求助於你,幫助他完成這個夢...