NowCoder逆序數 離散化 樹狀陣列

2021-09-10 23:29:52 字數 1355 閱讀 7964

題目鏈結:逆序數

解題思路:逆序數模板題,將數值離散化後把求值的逆序數轉化成求其rank的逆序數。利用樹狀陣列提公升標記陣列的效率。注意i - get_sum(rnk[i])表示在長度為i,或者說第i個數,之前排名比他大數量。

ac**

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

(int

)1e5+5

;typedef

long

long ll;

ll sum;

int c[maxn]

,val[maxn]

,tmp[maxn]

,rnk[maxn]

,n;inline

int lowbit (

int a)

inline

void add (

int idx,

int num)

}inline ll get_sum (

int idx)

return ans;

}void

solve()

sort

(tmp +

1, tmp +

1+ n)

;int len =

unique

(tmp +

1, tmp +

1+ n)

- tmp -1;

for(

int i =

1; i <= n; i++

)//從比較val的值轉化成維護其rnk 找rnk逆序數

memset

(c,0

,sizeof

(c))

; sum =0;

for(

int i =

1; i <= n; i++)

cout << sum <<

'\n';}

intmain()

51nod 1019 逆序數(逆序數 離散化)

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。input 第1行 n,n為序列的長度 n 5000...

inv 線段樹,逆序對,離散化

問題描述 給定n,以及a1,a2,an,求所有的數對 i,j 同時滿足 1 i j 2 2ai aj 輸入檔案 輸入檔案 inv.in第一行n 接下來n行,每行乙個整數,第i行的整數為ai 輸出檔案 輸出檔案inv.out包含一行乙個整數,表示滿足條件的數對的個數 輸入樣例 3 4 6 8 輸出樣例...

求逆序數數目(樹狀陣列 離散化)

404在玩忍者印記 mark of the ninja 操縱忍者時遇到這樣乙個場景,兩棟大樓之間有許多繩索,從側面看,就像這個樣子 我們的忍者非常有好奇心,他可以觀察到每個繩索的端點在兩棟樓的高度,想知道這些繩索有多少個交點 圖中黑色的點 他觀察到不會建築上不會有一點上有兩個繩索,並且沒有三條繩索共...