CF1811G2 Vlad and the Nice Paths (hard version)
题目描述
这是该问题的困难版本,与简单版本的区别仅在于 $n$ 和 $k$ 的约束条件。
Vlad 发现了一排 $n$ 块瓷砖以及一个整数 $k$。这些瓷砖从左到右编号,第 $i$ 块瓷砖的颜色为 $c_i$。经过一番思考,他决定对这些瓷砖进行如下操作。
你可以从任意一块瓷砖开始,向右跳任意数量的瓷砖,形成一条路径 $p$。我们称长度为 $m$ 的路径 $p$ 是“优美的”,当且仅当:
- $p$ 可以被划分为若干长度恰好为 $k$ 的块,即 $m$ 能被 $k$ 整除;
- $c_{p_1} = c_{p_2} = \ldots = c_{p_k}$;
- $c_{p_{k+1}} = c_{p_{k+2}} = \ldots = c_{p_{2k}}$;
- $\ldots$
- $c_{p_{m-k+1}} = c_{p_{m-k+2}} = \ldots = c_{p_{m}}$;
你的任务是求出最大长度的优美路径的数量。由于答案可能很大,请输出对 $10^9 + 7$ 取模后的结果。
输入格式
每组测试的第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。
每个测试用例的第一行包含两个整数 $n$ 和 $k$($1 \le k \le n \le 5000$),分别表示瓷砖的数量和块的长度。
每个测试用例的第二行包含 $n$ 个整数 $c_1, c_2, \dots, c_n$($1 \le c_i \le n$),表示每块瓷砖的颜色。
保证所有测试用例中 $n^2$ 的总和不超过 $25 \cdot 10^6$。
输出格式
输出 $t$ 行,每行一个数,表示对应测试用例最大长度优美路径的数量,对 $10^9 + 7$ 取模。
说明/提示
在第一个样例中,不可能构造出长度大于 $0$ 的优美路径。
在第二个样例中,满足条件的路径有:
- $1 \rightarrow 3 \rightarrow 4 \rightarrow 5$
- $2 \rightarrow 4 \rightarrow 5 \rightarrow 7$
- $1 \rightarrow 3 \rightarrow 5 \rightarrow 7$
- $1 \rightarrow 3 \rightarrow 4 \rightarrow 7$
在第三个样例中,任意长度为 $8$ 的路径都是优美的。
由 ChatGPT 4.1 翻译