POJ3067 Japan 樹狀陣列

2022-08-22 04:51:08 字數 803 閱讀 2900

japan某城市的左邊從上到下有n個城市,右邊從上到下有m個城市,

現要建k條高鐵,起點在左邊,終點在右邊,

問有多少個交點(任一交點只能有2條線同時經過)。

排序+樹狀陣列,插點問段。

排序後,按起點從小到大掃一遍,

a[j] 表示前i條線中,終點為j的個數。

c[j] a[j]的樹狀陣列。

注意:最後結果要用long long 

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=1000+5;6

intc[maxn];

7struct

edge

8edge[maxn*maxn];

11int

n,m;

12bool

cmp(edge i,edge j)

1318

int lowbit(int

x)19

22int sum(int

x)23

29return

temp;30}

31void update(int x,int

num)

3237}38

intmain()

3956 printf("

test case %d: %i64d\n

",cas,ans);57}

58return0;

59 }

view code

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