假幾何真逆序數 NB HDU3465

2022-08-20 23:00:17 字數 2185 閱讀 4853

題意:

有n條直線,問他們兩兩在橫座標開區間(l,r)之間相交的個數

n=50000,暴力肯定就不用想了,如果在紙上畫一畫可以發現如果兩條直線在(l,r)內相交,那麼他們與x= l和x=r的交點序數是相反的

所以我們只需要算與x=l的交點,然後根據這些點排序編個號,在與r相交,根據新的交點排個逆序,根據編號求逆序數即可。

需要注意的一點:兩種特殊情況如果不與l,r相交,那麼如果再這個區間內,必定所有直線都會與之相交,記錄下數量。

另一種情況就是,如果兩個直線的交點正巧在x=l和x=r時, 這種情況是不能記錄在內的,那麼在之前排序的時候與l相交的交點按公升序排列

如果交點座標相同按r交點座標公升序,再根據r的座標排降序的時候,如果r座標相同,根據l的座標排降序,就可以避免這種情況計算在內了。

求逆序數的時候是不會計算在裡面的。

求逆序數樹狀陣列即可。

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include

9 #include 10 #include 11

#define pb push_back

12#define clr(a) memset(a, 0, sizeof(a));

13#define mem(a, b) memset(a, b, sizeof(a));

14#define fi first

15#define se second

1617

using

namespace

std;

1819 typedef long

long

ll;20

21const

int maxn = 50007;22

const

int maxv = 207;23

const

int maxe = 207;24

const

int inf = 0x3f3f3f3f;25

26int

n;27

28struct

node

2933 node (double a, double

b) : a(a), b(b) {}

34}node[maxn];

35double

l, r;

3637

bool

cmpl(node n1, node n2)

3843

bool

cmpr(node n1, node n2)

4449

int cnt = 0;50

int c[maxn << 1

];51

int lowbit(int

x)52

55void modify(int x, int

data)

5660

int getsum(int

x)61

6768

intmain()

6986

double k = (y2-y1)/(x2-x1);

87double b = y2 - k*x2;

88double l = k*l+b, r = k*r+b;

89 node[cnt++] =node(l, r);90}

91 sort(node, node+cnt, cmpl);

92for (int i = 0; i < cnt; i++) node[i].nu = i+1

;93 sort(node, node+cnt, cmpr);

94//

for (int i = 0; i < cnt; i++) cout << node[i].nu << endl;

95int ans = 0;96

for (int i = 0; i < cnt; i++)

97101 ans += cnt*vrtcl;

102 cout << ans <

103}

104return0;

105 }

求逆序數 逆序數 歸併排序

求排列的逆序數 分治 一 題目描述 總時間限制 1000ms 記憶體限制 65536kb 描述 在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1...

真分頁和假分頁

假分頁 從資料庫一次性取出所有資料繫結到控制項上,再將所有資料根據每頁顯示記錄條數進行分頁。使用gridview控制項來達到分頁的功能 資料繫結 using system using system.collections.generic using system.linq using system....

真怒還是假怒

今天說著去圖書館更新一批書看,結果意外發現竟然有兩本書沒還,而且已經過去了半年多。瞬間不淡定了,我十分肯定以及確定我已經還了,但是系統上面就是顯示我沒還。當然了,根據以往的人生慣性我首先是變急了起來,然後是怒了起來,尤其是當我在圖書館發現我已經還了的時候。但是可能是最近的長期高壓工作吧,我向釋放一下...