題目鏈結
初始時,對於小朋友i來說,前面比他高的人數加上後面比他矮的人數就是這個小朋友將要交換的次數。
利用樹狀陣列,
第一遍求前面比他高的人數
第二遍求後面比他矮的人數
#include
using
namespace std;
const
int n =
1e6+9;
int tr[n]
,h[n]
;typedef
long
long ll;
ll b[n]
;//求的是初始時在第i個位置的小朋友的被交換的次數
intlowbit
(int x)
void
add(
int x,
int v)
intquery
(int x)
intmain()
for(
int i=
1;i<=n;i++
)memset
(tr,0,
sizeof
(tr));
//倒過來求後面比它矮的人數
for(
int i=n;i>=
1;i--
) ll res =0;
for(
int i=
1;i<=n;i++)}
cout
}
小朋友排隊 藍橋杯
因此我們可以借助樹狀陣列來求解前面比它大的個數,即逆序對 求後面比它小的個數的時候我們可以倒著插入,直接統計即可 因為有的資料為0,所以我們需要將所有插入的資料 1 另外統計的時候要處理相同的數,統計前面的數的時候不用減1,統計後面的數的時候需要減1 這樣處理的原因自己思考一下便出來了 includ...
藍橋杯 小朋友排隊
歷屆試題 小朋友排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度...
小朋友排隊 藍橋杯
問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3...