題目鏈結
對於每乙個位置的高度,如果想要交換次數最少,肯定要把在它後邊比它小的換到前面,在它前面比它大的換到後邊。然後我們發現其實這就是求整個序列的逆序對數,普通的暴力方法求逆序對肯定會超時,我們採用樹狀陣列求逆序對。然後對於每個位置求得的結果帶入等差數列求和公式求得結果。
**如下:
#include
using
namespace std;
int n;
int c[
100007
],d[
100007];
long
long ans[
100007];
struct node
p[100007];
intlowbit
(int x)
bool
cmp(node x,node y)
voidin(
int x)
}int
getsum
(int x)
return sum;
}int
main()
sort
(p+1
,p+1
+n,cmp)
;for
(int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++
)memset
(c,0
,sizeof
(c))
;for
(int i=n;i>=
1;i--
)long
long sum=0;
for(
int i=
1;i<=n;i++
)printf
("%lld\n"
,sum)
;return0;
}
小朋友排隊
n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3 依次類推...
小朋友排隊
問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3...
小朋友排隊
n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3 依次類推...