Doctor order 逆序數求交點個數

2021-07-29 16:56:59 字數 780 閱讀 3385

題目大意:兩條退垂直於x軸的直線,y沒有限制,給出幾條y=kx+b的直線,求這些直線將兩條線之間的區域分割成幾塊兒。

解題思路:經過研究(多試幾次是好了)結果=直線數+交點數+1。所以重點就變成了求交點的個數,從大牛們的部落格中看到用逆序數求交點個數,頓時感覺好牛,有木有!!

過程是這樣的:對每一條直線的輸入求出與給定兩條直線的交點縱座標,對其中乙個按y值排序,然後再對另一邊的y值歸併排序,利用在左邊的編號求出逆序數,這個逆序數就是交點數,原理畫圖很容易得到,就不冗述了。

下面直接上**:

#include#includeusing namespace std;

struct line l[30000], buf[30000];

int ans;

int x_l, x_r;

bool cmp(const line& l1, const line& l2)

void marge_sort(int b, int e)

} while(i <= mid) buf[pos++] = l[i++];

while(j <= e) buf[pos++] = l[j++];

for(int i = b; i <= e; i++)

}int main()

sort(l, l+n, cmp);

ans = 0;

marge_sort(0, n-1);

printf("%d\n", ans+n+1);

} return 0;

}

求逆序數 逆序數 歸併排序

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

NYOJ 求逆序數

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就是...

分治 求 逆序數

利用歸併,逆序數等於 左邊逆序數 右邊逆序數,加上 左邊 的每個數與右邊的每個數構成的逆序數。歸併過程 把 左邊和右邊按照從小到大排序 在 merge過程中發現a 右邊 a 左邊 說明 在此左邊p1位置的右側的數都能與 此時的p2位置的 a p2 構成逆序對。故 逐一對a j 進行判斷,累加即可得到...