小朋友排隊

2021-10-24 04:41:29 字數 963 閱讀 1676

題目鏈結

對於每乙個位置的高度,如果想要交換次數最少,肯定要把在它後邊比它小的換到前面,在它前面比它大的換到後邊。然後我們發現其實這就是求整個序列的逆序對數,普通的暴力方法求逆序對肯定會超時,我們採用樹狀陣列求逆序對。然後對於每個位置求得的結果帶入等差數列求和公式求得結果。

**如下:

#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 依次類推...