CF886E Maximum Element
题目描述
从前有一个叫 Petya 的神仙,嫌自己的序列求 $\max$ 太慢了,于是将序列求 $\max$ 的代码改成了下面这个样子:
```cpp
int fast_max(int n, int a[]) {
int ans = 0;
int offset = 0;
for (int i = 0; i < n; ++i)
if (ans < a[i]) {
ans = a[i];
offset = 0;
} else {
offset = offset + 1;
if (offset == k)
return ans;
}
return ans;
}
```
这个函数的原理是,如果碰到一个数后面连续的 $k$ 个数都比它小,那么就把这个数当做序列的最大值。
然而很显然,这份代码是错的。这位 Petya 神仙对它出错的情况很感兴趣。于是他找到了同为神仙的你,让你求有多少长度为 $n$ 的排列,这个函数会返回错误的结果,即返回值不是 $n$。由于答案过大,你只需要输出这个数对 $10^9+7$ 取模的结果。
输入格式
一行两个正整数 $n$ 和 $k\ (1\leq n,k\leq 10^6)$,表示排列的长度和上面那份代码里的 $k$。
输出格式
一行一个整数,表示答案对 $10^9+7$ 取模后的值。
说明/提示
Permutations from second example:
$ [4,1,2,3,5] $ , $ [4,1,3,2,5] $ , $ [4,2,1,3,5] $ , $ [4,2,3,1,5] $ , $ [4,3,1,2,5] $ , $ [4,3,2,1,5] $ .