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中找到对应区间,主席树维护即可。

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