DTOJ 4860. 神

题意

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

HN-001 给了你一个 n n n 阶排列 { a i } \{a_i\} {ai},并向你提出了 q q q 次询问。每次询问 HN-001 会给出四个参数 l 1 , r 1 , l 2 , r 2 ( 1 ≤ l 1 ≤ r 1 < l 2 ≤ r 2 ≤ n ) l_1,r_1,l_2,r_2(1 \le l1 \le r1 < l2 \le r2 \le n) l1,r1,l2,r2(1l1r1<l2r2n),且 r 1 − l 1 = r 2 − l 2 r_1 − l_1 = r_2 − l_2 r1l1=r2l2。记 m = r 1 − l 1 + 1 m = r_1 − l_1 + 1 m=r1l1+1,你需要构造一个 m m m 阶排列 { b j } \{b_j\} {bj} 并满足:$ \forall j \in [1,m], a_{j+l_1-1}< a_{b_j+l_2-1}$。

HN-001 并不满足于让你构造出一个 { b j } \{b_j\} {bj} , Ta 想让你算一下满足条件的的 { b j } \{b_j\} {bj} 的数量。由于 HN-001 崇尚秩序, Ta 对“逆序对”这类事物不感兴趣,因此排列 { a j } \{a_j\} {aj} 中的逆序对数不会太多,具体来说,就是满足 1 ≤ x < y ≤ n 1 \le x < y \le n 1x<yn a x > a y a_x > a_y ax>ay 的二元组 ( x , y ) (x,y) (x,y) 的数量不会超过 1 0 5 10^5 105

由于答案可能很大, HN-001 不想太为难你,于是 Ta 只要你输出答案对 1 0 9 + 7 10^9 + 7 109+7 取模的结果

∑ n , ∑ q \sum{n},\sum_{q} n,q 分别表示单个测试点中各组测试数据的 n , q n,q n,q 之和。

对于 20% 的数据, n ≤ 10 n \le 10 n10

对于 50% 的数据, n ≤ 1000 n \le 1000 n1000

对于 100% 的数据, 1 ≤ T ≤ 10 , 1 ≤ ∑ n , ∑ q ≤ 1 0 5 1 \le T \le 10 , 1 \le \sum_{n}, \sum_{q} \le 10^5 1T10,1n,q105,排列 { a i } \{a_i\} {ai} 的逆序对数不超过 1 0 5 10^5 105

数据很弱,欢迎水过.

题解

将两段分别从小到大排序后分别设为长度为 m m m的序列 a , b a,b a,b,答案就是 ∏ x i − i + 1 \prod{x_i-i+1} xii+1 x i x_i xi为a中小于 b i b_i bi的个数,直接这样做效率是 O ( n q ) O(nq) O(nq)的。

考虑逆序对个数最多 1 0 5 10^5 105个有什么用,发现对于上面的式子, ∑ m − x i \sum{m-x_i} mxi即为这两段区间之间你逆序对个数,这样不同的 x i x_i xi就不会超过 1 0 5 \sqrt{10^5} 105 个,只需对每种 x i x_i xi在较高的效率内算出即可。

x i x_i xi在b中又是不降的,于是考虑对每种 x i x_i xi在b中找到对应区间,主席树维护即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值