#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\} 並滿足:j[1,m],aj+l11<abj+l21\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 取模的結果。

數據範圍

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

題解

考慮暴力,把兩段區間分別排序,設 cnticnt_i 表示後一段第 ii 個數比前一段大的數的個數,那答案就是 i=1n(cntii+1)\prod_{i=1}^n(cnt_i-i+1) 。這樣是 O(nq)O(nq) 的。

kk 爲逆序對數,那麼 (mcnti)k\sum(m-cnt_i) \le k ,也就意味着 cnticnt_i 不同的個數是 O(k)O(\sqrt k) ,那我們就可以把 cnticnt_i 相同的數放在一起算,這個過程可以用主席樹維護,因此效率爲 O(qklogn)O(q\sqrt klogn)

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