POJ 3067 Japan 樹狀陣列求逆序對

2021-09-09 01:22:16 字數 728 閱讀 1523

題目大意:有兩排城市,這兩排城市之間有一些路相互連線著,求有多少條路相互交叉。

思路:把全部的路先依照x值從小到大排序,x值同樣的依照y值從小到大排序,然後插入邊的時候,先找有多少比自己y值小的,這些邊的x值一定比自己大,也就是乙個逆序對,然後統計起來。記得答案要用long long (__int64)

code:

#include #include #include #include #define max 1010

using namespace std;

struct complex

}point[max * max];

int cases;

int m,n,cnt;

__int64 ans;

__int64 fenwick[max];

inline void initialize();

inline void fix(int x);

inline __int64 getsum(int x);

int main()

cout << "test case " << t << ": " << ans << endl;

} return 0;

}inline void initialize()

inline void fix(int x)

inline __int64 getsum(int x)

poj 3067 japan 樹狀陣列

poj3067 japan 這裡求的是高架橋交叉的個數,首先按照規則排序,然後同上處理 這裡要注意的是 輸入輸出要用scanf 且要用sum 要用 int64 include include include define maxn 2005 define max 1000010 using name...

POJ 3067 Japan 樹狀陣列

題意 兩邊都有一些城市,從上到下排列,有些城市之間有路,路與路之間會形成交點,問最後會形成多少個交點。思路 首先可以把有聯絡的城市轉化成平面上的點,比如說1 和 2 之間有一條路,則代表有乙個點,座標為 1,2 轉化之後可以用樹狀陣列做,可以發現最後的結果其實和所給的順序無關,因此我們可以按y軸從小...

樹狀陣列 POJ 3067 Japan

樹狀陣列的典型應用,典型輸入如下 13 4 4 1 42 3 3 23 1 表示有4條連線,如圖 顯然有5個交點。怎麼求呢?對輸入的數對 x,y 做排序,先按x公升序排,x相等按y公升序排,然後對y做樹狀陣列,每次更新檢查在他後面有多少個元素即可。include include using name...