QOJ.ac

QOJ

时间限制: 4 s 内存限制: 1024 MB 总分: 10

#8417. Kraniki [B]

统计

Radek,一家公司的老闆,試圖淹沒競爭對手 Mati 公司內所有存放文件的架子。為了進行完美的破壞行動,他請他的朋友,水管工 Janusz,在每個架子上方安裝一個小水龍頭。

為了簡化,Mati 公司的架子可以用平面上的線段來表示。每個架子都是連接點 $(l_i, h_i)$ 和 $(r_i, h_i)$ 之間的線段。水管工安裝的水龍頭位於座標 $(\frac{l_i+r_i}{2}, h_i + 0.5)$ 處。房間的地板由 $OX$ 軸表示。

當第 $i$ 個架子上方的小水龍頭被打開時,該架子就會被淹沒。隨後,水會從架子的兩端垂直向下流,並可能淹沒下方的架子,或者流到具有自然排水系統的地板上。

Radek 將以某種固定的順序考慮這些水龍頭。當他考慮第 $i$ 個水龍頭時,他僅在第 $i$ 個架子尚未被淹沒的情況下才會打開它。

Radek 尚未決定他將考慮水龍頭的順序。他將從 $n!$ 種可能的順序中隨機選擇一種,每種順序被選中的機率相同。Radek 現在想知道,他平均需要打開多少個水龍頭。

你的任務是回答 Radek 的問題,並給出模 $10^9 + 7$ 的答案。形式上,令結果為 $\frac{p}{q}$,其中 $q \neq 0$ 且 $\gcd(p, q) = 1$。你需要輸出一個數字 $p \cdot q^{-1} \pmod{10^9 + 7}$,其中 $q^{-1}$ 是集合 $\{1, 2, \dots, 10^9 + 6\}$ 中唯一滿足 $q \cdot q^{-1} \equiv 1 \pmod{10^9 + 7}$ 的數字。

可以證明,對於所有滿足題目條件的測試資料,結果都是一個有理數,且其最簡分數形式的分母不能被 $10^9 + 7$ 整除。

輸入格式

輸入的第一行包含一個自然數 $n$ ($1 \le n \le 500\,000$),表示 Mati 公司中架子的數量。

接下來的 $n$ 行包含架子的描述。第 $i$ 行包含兩個自然數 $l_i, r_i$ ($1 \le l_i < r_i \le 2 \cdot n$),如題目所述。為簡化起見,我們假設 $h_i = i$。

你可以假設所有數字 $l_i, r_i$ 都是兩兩不同的——數字 $l_i, r_i$ 組成了從 $1$ 到 $2 \cdot n$ 的一個排列。

輸出格式

在標準輸出的唯一一行中,輸出一個數字,等於 Radek 平均需要打開的水龍頭數量,模 $10^9 + 7$。

範例

輸入 1

3
4 6
1 3
2 5

輸出 1

2

輸入 2

5
2 9
3 4
1 8
6 10
5 7

輸出 2

233333338

說明

考慮第一個範例中 Radek 分析水龍頭的所有可能順序:

  • 對於順序 1, 2, 3,他會打開所有 3 個水龍頭。
  • 對於順序 1, 3, 2,他會打開第一個和第三個水龍頭。打開第三個水龍頭後,水也會淹沒第二個架子,因此他不需要再打開第二個水龍頭。
  • 對於順序 2, 1, 3,他會打開所有 3 個水龍頭。
  • 對於順序 2, 3, 1,他會打開第二個和第三個水龍頭。打開第三個水龍頭後,水會淹沒第一個架子,因此不需要打開第一個水龍頭。
  • 對於順序 3, 1, 2 以及 3, 2, 1,他只會打開第三個水龍頭。打開後所有架子都會被淹沒,因此不需要打開其他水龍頭。

因此,Radek 平均需要打開 $\frac{1}{6} \cdot (3 + 2 + 3 + 2 + 1 + 1) = 2$ 個水龍頭。

在第二個範例中,Radek 平均需要打開 $\frac{91}{30}$ 個水龍頭。由於 $30^{-1} \equiv 233333335 \pmod{10^9 + 7}$,我們得到 $91 \cdot 233333335 \equiv 21233333485 \equiv 233333338 \pmod{10^9 + 7}$。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.