poj3067 樹狀陣列解決二維逆序對

2021-09-26 00:18:00 字數 1099 閱讀 5204

一直在學習二維逆序對的解決方法,然後並沒有搞明白,這是第一道自己搞出來的模板題。

poj3067 japan

題解:設東部的城市為e

ie_i

ei​,西部的城市為w

iw_i

wi​,那麼如果連線e

1e_1

e1​w

2w_2

w2​和連線e

2e_2

e2​w

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 條路相連,因為是起點是從大到小,終點是取乙個前面點的路,所以肯定相交 具體處理就是利用...