poj 3067 Japan 樹狀陣列求逆序對

2021-07-14 12:25:48 字數 654 閱讀 2601

傳送門

題目大意:

給出t個case,每個case給出k條邊,這些邊的左右兩個端點分別屬於n和m兩個集合,求出有多少條相交的邊(如果兩條邊有公共端點不算相交)

分析:

顯然如果兩條邊相交一定滿足(xi-xj)*(yi-yj)<0,所以我們可以把k條邊按照x單調遞增的順序排排序,然後求y的逆序對即可(注意:如果兩條邊x相同,y按照遞增的順序排,因為這樣處理時不會把這兩條邊算為相交的邊notice!!!)

**如下:

#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn=1000+5;

int cas,n,m,k,t;

ll tr[maxn],ans,one=1;

struct roads[maxn*maxn];

bool cmp(road a,road b)

ll query(int x)

signed main(void)

return

0;}

by >o< neighthorn

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...