DTOJ 4860. 神

題意

衆所周知, HN-001 是神一般的存在。

HN-001 給了你一個 nn 階排列 {ai}\{a_i\},並向你提出了 qq 次詢問。每次詢問 HN-001 會給出四個參數 l1,r1,l2,r2(1l1r1<l2r2n)l_1,r_1,l_2,r_2(1 \le l1 \le r1 < l2 \le r2 \le n),且 r1l1=r2l2r_1 − l_1 = r_2 − l_2。記 m=r1l1+1m = r_1 − l_1 + 1,你需要構造一個 mm 階排列 {bj}\{b_j\} 並滿足:$ \forall j \in [1,m], a_{j+l_1-1}< a_{b_j+l_2-1}$。

HN-001 並不滿足於讓你構造出一個 {bj}\{b_j\} , Ta 想讓你算一下滿足條件的的 {bj}\{b_j\} 的數量。由於 HN-001 崇尚秩序, Ta 對“逆序對”這類事物不感興趣,因此排列 {aj}\{a_j\} 中的逆序對數不會太多,具體來說,就是滿足 1x<yn1 \le x < y \le nax>aya_x > a_y 的二元組 (x,y)(x,y) 的數量不會超過 10510^5

由於答案可能很大, HN-001 不想太爲難你,於是 Ta 只要你輸出答案對 109+710^9 + 7 取模的結果

n,q\sum{n},\sum_{q} 分別表示單個測試點中各組測試數據的 n,qn,q 之和。

對於 20% 的數據, n10n \le 10

對於 50% 的數據, n1000n \le 1000

對於 100% 的數據, 1T10,1n,q1051 \le T \le 10 , 1 \le \sum_{n}, \sum_{q} \le 10^5,排列 {ai}\{a_i\} 的逆序對數不超過 10510^5

數據很弱,歡迎水過.

題解

將兩段分別從小到大排序後分別設爲長度爲mm的序列a,ba,b,答案就是xii+1\prod{x_i-i+1}xix_i爲a中小於bib_i的個數,直接這樣做效率是O(nq)O(nq)的。

考慮逆序對個數最多10510^5個有什麼用,發現對於上面的式子,mxi\sum{m-x_i}即爲這兩段區間之間你逆序對個數,這樣不同的xix_i就不會超過105\sqrt{10^5}個,只需對每種xix_i在較高的效率內算出即可。

xix_i在b中又是不降的,於是考慮對每種xix_i在b中找到對應區間,主席樹維護即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章