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: 2case #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...