求逆序對數:最進剛剛學習的樹狀陣列,一直感覺沒啥用處,沒想到根據樹狀陣列的特殊結構求逆序對數還是挺方便的題目鏈結
題意就是求逆序對:給了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行,每行乙個長整型範圍內的...