一直在學習二維逆序對的解決方法,然後並沒有搞明白,這是第一道自己搞出來的模板題。
poj3067 japan
題解:設東部的城市為e
ie_i
ei,西部的城市為w
iw_i
wi,那麼如果連線e
1e_1
e1w
2w_2
w2和連線e
2e_2
e2w
1w_1
w1的兩條道路想形成交叉,必然有當e
1 e_1 < e_2 e1時,w 1>w2 w_1 > w_2 w1>w2 ,也就是說,題意所求的交叉數量一定是在e ee有序的情況下,求w ww的逆序對數,所以我們先對e ee排序,在用樹狀陣列對w ww求逆序對數即可。#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n =
10100
;int n, m, k;
ll num[n]
, c[n]
;struct roadr[
1010100];
bool
cmp(road a, road b)
void
add(
int x,
int y)
ll ask
(int x)
intmain()
sort
(r+1
, r+k+
1, cmp)
; ll ans =0;
for(
int i = k; i; i--
)printf
("test case %d: %lld\n"
,++cas, ans);}
return0;
}
poj 3067 樹狀陣列
poj 3067樹狀陣列.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std const int maxn 1010 int sum maxn struct line return b a.b 按第2個座標降序...
POJ 3067 樹狀陣列
題意 日本的東西海岸分別有 m,n 座城市,從北至南依次編號,現在東西海岸的某些城市之間修建公路,求所有交點的數量。題解 若 a,b 兩公路存在交點的話,必有 a.east b.east,a.west b.west 或者 a.east b.east,a.west b.west。對每一條公路的 eas...
POJ 3067 樹狀陣列
題意 給你兩行數字,n個m個,然後給你k條線直接把兩個數連起來,問有多少個交叉的 思路 假定上一行是起點,下一行是終點。把路按照起點從大到下排序,然後可以直接對每條路查詢,這條路目前的交叉數,等於sum 終點 1 條路相連,因為是起點是從大到小,終點是取乙個前面點的路,所以肯定相交 具體處理就是利用...