樹狀陣列求逆序對數小白講解 poj2299

2021-09-29 16:19:06 字數 935 閱讀 9504

求逆序對數:最進剛剛學習的樹狀陣列,一直感覺沒啥用處,沒想到根據樹狀陣列的特殊結構求逆序對數還是挺方便的

題目鏈結

題意就是求逆序對:

給了n個數,但是數比較分散,所以我們需要用離散化一下,把分散的數轉化為為緊湊而且好求的數,然後排一下序,之後求逆序數即可

題解:由於給的數比較散,而且我們求逆序數隻需要根據大小來判斷逆序對數,所以把分散的數離散化一下,然後根據樹狀陣列求一下逆序數即可

如果不理解樹狀陣列求逆序數可以參考:

大神部落格

ac**:

#include

#include

#include

using namespace std;

#define ll long long

#define maxn 500005

ll a[maxn]

;ll c[maxn]

;struct node

temp[maxn]

;bool

cmp(node x,node y)

ll n;

ll lowbit(ll x)

void update(ll i,ll k)

}ll getsum(ll i)

return ans;

}int main(

) sort(temp+

1,temp+

1+n,

cmp)

; ll ans=0;

for(ll i=

1; i<=n; i++)

printf(

"%lld\n"

,ans);}

}

樹狀陣列求Thair對數

thair問題 問題描述 在含有n個數的序列a 1 a n 中,三個數被稱作 thair 當且僅當iconst maxn 100005 var a,b,c,id,ref array 0.maxn of longint ref reflection 陣列,即對映陣列,用來離散 f,g array 0....

樹狀陣列求逆序數

逆序數就是數中各位在它前面有多少個數比它大,求出這些元素個數之和。今天看了個樹狀陣列,可以很好的解決這個問題,普通方法需要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行,每行乙個長整型範圍內的...