POJ 3067 Japan 線段樹 轉化

2021-06-09 20:54:25 字數 974 閱讀 6726

//poj 3067 japan 線段樹 轉化

/*題意:

有一幅圖,左邊m個結點,右邊n個結點,給出k條邊連線左邊結點和右邊結點

求這些邊相互交叉的個數,乙個點只會有兩條邊經過

思路:同樣將線段轉化成點然後放在二維平面圖上,對於兩條線段[si,ei],[sj,ej]

滿足交叉的條件是siej || si>sj&&ei#include#include#define n 1010

#define m 1000010

#define lson rt<<1,l,mid

#define rson rt<<1|1,mid+1,r

int t,n,m,k;

int sum[n<<2],a[n];

__int64 ans;

struct nodes[m];

int cmp(const void *a,const void *b)

void pushup(int rt)

void update(int rt,int l,int r,int x)

int mid = (l + r) >> 1;

if(x <= mid) update(lson,x);

else update(rson,x);

pushup(rt);

}int query(int rt,int l,int r,int l,int r)

int mid= (l + r) >> 1;

int res= 0;

if(l <= mid) res += query(lson,l,r);

if(r > mid ) res += query(rson,l,r);

return res;

}int main()

printf("test case %d: %i64d\n",ca++,ans);

} return 0;

}

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