poj3067 Japan 樹狀陣列

2021-07-05 01:24:26 字數 990 閱讀 7021

題目大意

左邊有n個點,從上到下依次為1、2、3、......、n-1、n

右邊有m個點,從上到下一次為1、2、3、.......、m-1、m

然後有k條路,分別連線左右兩邊的點。

求這些路之間的交點有多少。每個交點至多被兩條路徑經過。

這一題的做法:

這一題其實就是求逆序對的稍微變化。只要將k個路徑按照:x大的大,若x相等則y大的大。

**:

bool operator < (const road &a, const road &b)

然後從大到小求a[i].y的逆序對即可

**:

for (i=1; i<=k; i++)

全部**:

#include #include #include #include #include #include using namespace std;

const int maxn = 1000+100;

class road

;bool operator < (const road &a, const road &b)

int h[maxn];

road a[maxn*maxn];

long long ans;

int n, m, k;

int lowbit(int x)

int query(int x)

return ans;

}void updata(int x, int val)

}int main()

sort(a+1, a+k+1);

memset(h, 0, sizeof(h));

for (i=1; i<=k; i++)

printf("test case %d: %lld\n", tt, 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...