题意
众所周知, HN-001 是神一般的存在。
HN-001 给了你一个 n 阶排列 {ai},并向你提出了 q 次询问。每次询问 HN-001 会给出四个参数 l1,r1,l2,r2(1≤l1≤r1<l2≤r2≤n),且 r1−l1=r2−l2。记 m=r1−l1+1,你需要构造一个 m 阶排列 {bj} 并满足:$ \forall j \in [1,m], a_{j+l_1-1}< a_{b_j+l_2-1}$。
HN-001 并不满足于让你构造出一个 {bj} , Ta 想让你算一下满足条件的的 {bj} 的数量。由于 HN-001 崇尚秩序, Ta 对“逆序对”这类事物不感兴趣,因此排列 {aj} 中的逆序对数不会太多,具体来说,就是满足 1≤x<y≤n 且 ax>ay 的二元组 (x,y) 的数量不会超过 105。
由于答案可能很大, HN-001 不想太为难你,于是 Ta 只要你输出答案对 109+7 取模的结果
记 ∑n,∑q 分别表示单个测试点中各组测试数据的 n,q 之和。
对于 20% 的数据, n≤10
对于 50% 的数据, n≤1000
对于 100% 的数据, 1≤T≤10,1≤∑n,∑q≤105,排列 {ai} 的逆序对数不超过 105
数据很弱,欢迎水过.
题解
将两段分别从小到大排序后分别设为长度为m的序列a,b,答案就是∏xi−i+1,xi为a中小于bi的个数,直接这样做效率是O(nq)的。
考虑逆序对个数最多105个有什么用,发现对于上面的式子,∑m−xi即为这两段区间之间你逆序对个数,这样不同的xi就不会超过105个,只需对每种xi在较高的效率内算出即可。
而xi在b中又是不降的,于是考虑对每种xi在b中找到对应区间,主席树维护即可。