#P11745. Dynamic K-th Problem

Dynamic K-th Problem

题目背景

萤火穿过风 融化成飞光 就在你眼眸盛放

题目描述

小 D 发现了一群萤虫,萤群中有 nn 个萤虫且按照顺序排成一行并将其从 11nn 编号。小 D 非常厉害,他一眼就看出这 nn 个萤虫的光度,且这些萤虫的亮度值是 1n1\sim n 的一个排列。小 D 想找一些萤虫,让它们共同编织出如梦似幻的璀璨光幕,具体的,他需要一个 萤虫区间

小 D 对 萤虫区间 定义苛刻:至少得有 kk 个萤虫且这些萤虫编号连续。

小 D 十分欣赏萤虫的光芒,他定义编号从 LLRR 的萤虫区间的总体光度值为这些萤虫的光度值中的第 mm 大数。小 D 给定了 QQ 个指标,每个指标给定一个数 xx,寻找一个 萤虫区间 使得这个区间的总体光度值大于等于 xx。当然,这种区间是很多的,你需要帮小 D 数有多少这样的区间。

输入格式

第一行五个整数 n,k,m,B,casn,k,m,B,cas,其中 BB 是给定常数,cascas 是当前数据点所属的 Subtask 编号。

第二行空格隔开的 nn 个数字 aia_i,表示 nn 个萤虫的光度值。用给定代码生成。

第三行一个整数 QQ,表示给定指标个数。

第四行空格隔开的 QQ 个数字,表示每次询问的指标 xx,用给定代码生成。

本题输入量较大,输入数据可以用以下代码生成:在此可查看完整代码

// 请注意避免整形溢出 
#define int long long
const int N = 1e6 + 5, INF = 2147483647;
int n, k, m, B, Q, x, a[N], cas;
// myrand 为数据生成器 
struct myrand {
	int A, B, P, x;
	myrand(int A, int B, int P, int x) {
		this->A = A; this->B = B; this->P = P; this->x = x;
	} int next() { return x = (A * x + B) % P; }
};
int read_x(int x) { // 不同数据下的 x 不同
	if (cas == 7) x = x % 2;
	else x = x % (n + 1);
	return x;
}
signed main() {
	cin >> n >> k >> m >> B >> cas >> Q;	
	// B 是生成数据是给定常数。在此初始化数据生成器 myrand 参数 
	myrand rnd(16807, B, INF, 0);
	// 伪随机生成 a 序列 
	for (int i = 1; i <= n; i++) a[i] = i;
	for (int i = 1; i <= n; i++) {
		int l = rnd.next() % n + 1, r = rnd.next() % n + 1;
		swap(a[l], a[r]);
	}
	// 生成查询指标 
	for (int i = 1; i <= Q; i++) x = read_x(rnd.next());
}

你只需要以上述代码为准,进行输入即可。具体操作解释请参见样例解释。本题解法和数据的生成方式无关

输出格式

对于每一个询问指标,都需要求出对应萤虫区间个数。

为了避免输出过多,请输出 QQ 次查询中萤虫区间个数的 异或和。具体操作解释请参见样例解释。

输入数据 1

5 3 2 999 1
5

输出数据 1

6

输入数据 2

6 3 2 998 1
5

输出数据 2

3

输入数据 3

1000000 10000 1 998244353 4
1000000

输出数据 3

306558155574

输入数据 4

1000000 10000 2 998244353 5
1000000

输出数据 4

39831215473

输入数据 5

1000000 100000 100 1231 8
1000000

输出数据 5

170979323511

提示

【样例解释 1\mathbf 1

萤虫从 11nn 的光度值为:5,4,2,3,15,4,2,3,1。总共有 66 个萤虫区间,要求区间第 22 大值,分别是:

  • 编号 1133 构成的萤虫为 [5,4,2][5,4,2],总体光度值为 44
  • 编号 2244 构成的萤虫为 [4,2,3][4,2,3],总体光度值为 33
  • 编号 3355 构成的萤虫为 [2,3,1][2,3,1],总体光度值为 22
  • 编号 1144 构成的萤虫为 [5,4,2,3][5,4,2,3],总体光度值为 44
  • 编号 2255 构成的萤虫为 [4,2,3,1][4,2,3,1],总体光度值为 33
  • 编号 1155 构成的萤虫为 [5,4,2,3,1][5,4,2,3,1],总体光度值为 44

共有 55 次询问,询问指标分别是 2,2,2,0,22,2,2,0,2,则答案分别是:6,6,6,6,66,6,6,6,6。则总异或值为 66

【样例解释 2\mathbf 2

萤虫从 11nn 的光度值为:3,1,4,2,5,63,1,4,2,5,6

共有 55 次询问,询问指标分别是 1,5,1,4,61,5,1,4,6,答案分别是:10,4,10,7,010,4,10,7,0。则总异或值为 33

【样例解释 3\mathbf 3 该数据满足 Subtask 4 的限制。具体求解不做解释。请注意整形溢出相关问题。

【样例解释 4\mathbf 4 该数据满足 Subtask 5 的限制。具体求解不做解释。

【样例解释 5\mathbf 5 该数据满足 Subtask 8 的限制。具体求解不做解释。


【数据规模与约定】

本题开启子任务捆绑测试。本题输入输出量一点不大,但请注意优化常数。本题自动开启 O2 优化。

  • Subtask 1(10 pts):mn100m\leq n\leq 100Q100Q\leq 100
  • Subtask 2(10 pts):mn1000m\leq n\leq 1000Q100Q\leq 100
  • Subtask 3(18 pts):n105n\leq 10^5m100m\leq 100
  • Subtask 4(9 pts):n106n\leq 10^6m=1m=1
  • Subtask 5(9 pts):n106n\leq 10^6m=2m=2
  • Subtask 6(15 pts):n106n\leq 10^6k=m100k=m\leq 100
  • Subtask 7(7 pts):n106n\leq 10^6m100m\leq 1000x10\leq x\leq 1
  • Subtask 8(22 pts):n106n\leq 10^6m100m\leq 100

对于所有测试点满足 1mkn1061\leq m\leq k\leq n\leq 10^6mmin{1000,n}m\leq \min\{1000,n\}1ain1\leq a_i\leq n1Q1061\leq Q\leq 10^61B1091\leq B\leq 10^9