题目链接:Codeforces 588D Duff in Beach
D. Duff in Beach
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
While Duff was resting in the beach, she accidentally found a strange array b0, b1, …, bl - 1 consisting of l positive integers. This array was strange because it was extremely long, but there was another (maybe shorter) array, a0, …, an - 1 that b can be build from a with formula: bi = ai mod n where a mod b denoted the remainder of dividing a by b.
Duff is so curious, she wants to know the number of subsequences of b like bi1, bi2, …, bix (0 ≤ i1 < i2 < … < ix < l), such that:
1 ≤ x ≤ k
For each 1 ≤ j ≤ x - 1,
For each 1 ≤ j ≤ x - 1, bij ≤ bij + 1. i.e this subsequence is non-decreasing.
Since this number can be very large, she want to know it modulo 109 + 7.
Duff is not a programmer, and Malek is unavailable at the moment. So she asked for your help. Please tell her this number.
Input
The first line of input contains three integers, n, l and k (1 ≤ n, k, n × k ≤ 106 and 1 ≤ l ≤ 1018).
The second line contains n space separated integers, a0, a1, …, an - 1 (1 ≤ ai ≤ 109 for each 0 ≤ i ≤ n - 1).
Output
Print the answer modulo 1 000 000 007 in one line.
Examples
input
3 5 3
5 9 1
output
10
input
5 10 3
1 2 3 4 5
output
25
Note
In the first sample case, . So all such sequences are: , , , , , , , , and .
定义b[]的合法子序列:非降序,记子序列相邻元素在原序列中下标为i和j(i < j),要求i / n + 1 == j / n。
题意:给定n个数的序列a[],让你循环构造出长度为l的序列b[]。问序列b[]中合法的不同子序列个数。
思路:题目给出了n*k<=10^6,就一定有目的。。。我们先抛开l不说,我们构造出一个k段的a[]序列,记为c[]。
设置 dp[i][j] 为以第i段第j个元素为末尾的子序列数目,我们先不考虑长度为1的子序列,算的时候从第1段算起。段数从0计数。
初始化 dp[0][j]=1