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

2022-08-17 13:18:12 字數 1479 閱讀 5462

404在玩忍者印記(mark of the ninja)操縱忍者時遇到這樣乙個場景,兩棟大樓之間有許多繩索,從側面看,就像這個樣子:

我們的忍者非常有好奇心,他可以觀察到每個繩索的端點在兩棟樓的高度,想知道這些繩索有多少個交點(圖中黑色的點)。他觀察到不會建築上不會有一點上有兩個繩索,並且沒有三條繩索共點。

輸入描述

第一行:整數t,代表有t組資料。 (1 <= t <= 100)

接下來na行給出兩個整數a_i, b_i,分別代表繩索端點在左右兩邊大樓的高度。

0 <= a_i,b_i <= 1000000000

輸出描述

case #x: y

x代表樣例組數,從1開始。

y代表繩索交點數。

樣例輸入

2

31 10

5 57 7

21 1

2 2

樣例輸出

case #1: 2

case #2: 0

樹狀陣列高效求出逆序對,點的數目少,數值可能很大,所以用了離散化處理

#include#include

#include

#include

using

namespace

std;

const

int maxn= 1e5+7

;int

sum[maxn], arr[maxn], k;

struct

edge

}edge[maxn];

int lowbit(int

x)void add(int i, int

val)

}int sum(int

i)

returns;}

int bisearch(int key, int

n) //}

intmain()

sort(arr+1, arr+k+1

);

int m = 2

;

for(int i = 2; i < k; i++)

}sort(arr+1, arr+m+1

); sort(edge, edge+k);

memset(sum,

0, sizeof

(sum));

long

long ans = 0

;

for(int i = 0; i < k; i++)

printf(

"case #%d:

", kase++);

printf(

"%lld\n

", ans);

}return0;

}

NowCoder逆序數 離散化 樹狀陣列

題目鏈結 逆序數 解題思路 逆序數模板題,將數值離散化後把求值的逆序數轉化成求其rank的逆序數。利用樹狀陣列提公升標記陣列的效率。注意i get sum rnk i 表示在長度為i,或者說第i個數,之前排名比他大數量。ac include include include include inclu...

poj 2299 樹狀陣列求逆序數 離散化

最初做離散化的時候沒太確定但是寫完發現對的 因為字尾陣列學的時候,這種思維習慣了吧 1 初始化as i i 對as陣列按照num的大小間接排序 2 bs as i i 現在bs陣列就是num陣列的離散化後的結果 3 注意,樹狀陣列中lowbit i i是不可以為0的,0 0 0,死迴圈.includ...

HDU 4911 樹狀陣列求逆序數 離散化

題意 最多可以交換k次,就最小逆序對數。思路 逆序數定理,當逆序對數大於0時,若ai要知道樹狀陣列的長度是資料範圍,由於資料比較大,所以要離散化。注意開long long。include using namespace std define mem a,b memset a,b,sizeof a d...