因此我們可以借助樹狀陣列來求解前面比它大的個數,即逆序對;
求後面比它小的個數的時候我們可以倒著插入,直接統計即可;
因為有的資料為0,所以我們需要將所有插入的資料+1;
另外統計的時候要處理相同的數,統計前面的數的時候不用減1,統計後面的數的時候需要減1(這樣處理的原因自己思考一下便出來了);
#include#include#includeusing namespace std;
#define maxn 1000010
int n;
__int64 c[maxn+20];
int num[100010];
__int64 cnt[100010];
int lowbit(int x)
int updata(int x)
}int sum(int x)
return ans;
}int main()
__int64 ans=0;
for(int i=0;ians+=(cnt[i]*(cnt[i]+1)/2);
printf("%i64d\n",ans);
}
藍橋杯 小朋友排隊
歷屆試題 小朋友排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度...
小朋友排隊 藍橋杯
問題描述 n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3...
藍橋杯 小朋友排隊
n 個小朋友站成一排。現在要把他們按身高從低到高的順序排列,但是每次只能交換位置相鄰的兩個小朋友。每個小朋友都有乙個不高興的程度。開始的時候,所有小朋友的不高興程度都是0。如果某個小朋友第一次被要求交換,則他的不高興程度增加1,如果第二次要求他交換,則他的不高興程度增加2 即不高興程度為3 依次類推...