日本有n個城市在東邊,從北至南編號為1 2 3,,,n,m個城市在西邊,從北至南編號為1 2 ,,,,m,k條高速公路將被建造
高速公路的一端在西邊,一端在東邊
輸入有多組樣例,
每組樣例第一行為
n m k
接下來有k行,分別為高速公路的端點
求高速公路的交點有多少個,不包括以城市為相交點
對ax,ay和bx,by兩條高速公路,有相交點必須(ax-bx)*(ay-by)<0
所以就按照左邊從大到小排序,找右邊的逆序數。
#include
#include
#include
#include
using namespace std;
typedef long
long ll;
#define ms(a) memset(a,0,sizeof(a))
#define mp make_pair
#define pb push_back
const
int inf = 0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fll;
inline ll read()
while(ch>='0'&&ch<='9')
return x*f;
}///
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
/////
const
int maxn = 1e6+10;
ll bit[maxn];
struct node
}a[maxn];
void add(int x,int v)
return res;
}int main()
cout << "test case "
<< cas << ": "
<< ans << endl;
}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...