題目描述
prince對他在這片大陸上維護的秩序感到滿意,於是決定啟程離開艾澤拉斯。在他動身之前,prince決定賦予king_bette最強大的能量以守護世界、保衛這裡的平衡與和諧。在那個時代,平衡是個夢想。因為有很多奇異的物種擁有各種不穩定的能量,平衡瞬間即被打破。kb決定求助於你,幫助他完成這個夢想。
一串數列即表示乙個世界的狀態。
平衡是指這串數列以公升序排列,而從一串無序數列到有序數列需要通過交換數列中的元素來實現。kb的能量只能交換相鄰兩個數字。他想知道他最少需要交換幾次就能使數列有序。
輸入格式
第一行為數列中數的個數 n(n≤100000)。
第二行為 n 個數a1
~an (每個數小於100000),表示當前數列的狀態。
輸出格式
輸出乙個整數,表示最少需要交換幾次能達到平衡狀態。
樣例資料
輸入
4輸出 備註2 1 4 3
本題另外一種描述:
給定乙個序列a1
,a2,
…,an
,如果存在
i<
j 並且ai
>aj
,那麼我們稱之為逆序對,求逆序對的數目。
分析:樹狀陣列求逆序對模板。**比較難想,其實就是說每個數前面數的總數減去現在它前面小於它的數的個數,得到了大於它的數的個數,也就是逆序對數。
好吧,其實不難想,之前在想c[i]是幹嘛用的,結果只是離散化了一下。這道題資料夠小,不用c不sort直接把a往樹狀陣列裡放都可以(記得把陣列開大)。
**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
int getint()
for(;isdigit(ch);ch=getchar())
sum=(sum<<3)+(sum<<1)+ch-48;
return sum*f;
}const
int maxn=100010;
struct nodea[maxn];
int n,sum[maxn],c[maxn];
long
long ans;
bool comp(const node &a,const node &b)
void update(int x)
int query(int x)
int main()
cout
<'\n';
return
0;}
本題結。 光榮的夢想 (樹狀陣列求逆序數和)
題目描述 prince對他在這片大陸上維護的秩序感到滿意,於是決定啟程離開艾澤拉斯。在他動身之前,prince決定賦予king bette最強大的能量以守護世界 保衛這裡的平衡與和諧。在那個時代,平衡是個夢想。因為有很多奇異的物種擁有各種不穩定的能量,平衡瞬間即被打破。kb決定求助於你,幫助他完成這...
樹狀陣列求逆序數
逆序數就是數中各位在它前面有多少個數比它大,求出這些元素個數之和。今天看了個樹狀陣列,可以很好的解決這個問題,普通方法需要o n 2 複雜度,用樹狀陣列只需要o nlongn 樹狀陣列實際上還是乙個陣列,只不過它的每個元素儲存了跟原來陣列的一些元素相關的結合值。若a為原陣列,定義陣列c為樹狀陣列。c...
樹狀陣列求逆序對
題目描述 給定乙個陣列a,它包含n個整數,分別是a 1 a 2 a n 如果存在下標i和j,使得 i j 且 a i a j 同時成立,則 i,j 就為乙個 逆序對 那麼a陣列總共有多少對不同的 逆序對 輸入格式 1247.in 第一行為n 1 n 100000 接下來是n行,每行乙個長整型範圍內的...