SGU180(樹狀陣列,逆序對,離散)

2022-05-18 09:40:11 字數 1328 閱讀 5144

inversions

time limit per test: 0.25 sec. 

memory limit per test: 4096 kb

input: standard 

output: standard

there are n integers (1<=n<=65537) a1, a2,.. an (0<=ai<=10^9). you need to find amount of such pairs (i, j) that 1<=ia[j].

input

the first line of the input contains the number n. the second line contains n numbers a1...an.

output

write amount of such pairs.

sample test(s)

input

5 2 3 1 5 4

output

3這道題需要離散,樹狀陣列求逆序對是離散後,統計加入該元素時當前陣列中

已經存在多少個比它大的數,這就是該數作為逆序對後者的貢獻度,然後就可以

求解了,一般需要離散化。

1 #include2 #include3 #include4 #include5 #include6

#define n 70007

7using

namespace

std;89

intn;

10long

long

ans;

11int

b[n],c[n];

12struct

node

13a[n];

1617

bool

cmp(node x,node y)

1821

int lowbit(int

x)22

25void change(int x,int

y)26

30int query(int

x)31

37int

main()

3845 sort(a+1,a+n+1

,cmp);

46int cnt=0;47

for (int i=1;i<=n;i++)

4852

for (int i=1;i<=n;i++)

5357 printf("

%lld

",ans);

58 }

逆序對 離散樹狀陣列

求逆序對有三種以上方法 1 離散樹狀陣列,2 線段樹,3 歸併排序 今天做了下洛谷的p1908逆序對 1 一開始用樹狀陣列,一直re,後來在發現自己一直忽略離散化。include include using namespace std const int maxn 400000 5 typedef ...

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

sample test s input 52 3 1 5 4 output 3 題目大意 求逆序對的個數 題目分析 求逆序對有很多方法,比如說用合併排序 分治 樹狀陣列 線段樹,甚至連暴力 氣泡排序 也可以做,但是要注意會不會超時。這裡就講一下樹狀陣列的方法,這一題最有意思的是離散化的方法,這個方法...

樹狀陣列求逆序對及離散化

樹狀陣列求逆序對及離散化 逆序對指的是乙個序列中有兩個數ai和aj,iaj,即它們下標與數值的增減不一致,那麼對於這個問題 求乙個序列中逆序對的個數,該如何解決呢?我最初接觸到的方法是歸併排序,是個很不錯的方法,但是對於向我一樣的蒟蒻 還是有理解難度,而今天講的樹狀陣列解法,至少 理解難度降低了不少...