bzoj#P3692. 愚蠢的算法

愚蠢的算法

题目描述

对于一个 1n1-n 的排列 p1,p2,...,pn{p_1,p_2,...,p_n},将 pip_ipjp_j 交换,需要的代价为 2×ij12\times |i-j|-1,记 f(p)f(p) 表示通过交换将排列 pp 变成从小到大的排列,即 1,2,3,n{1,2,3…,n} 的最小代价。一个愚蠢的算法是用 g(p)=max(0,ipi)g(p)=\sum max(0,i-pi) 来估算 f(p)f(p)。给出 1n1-n 的排列的前 mm 个元素,求有多少个排列 pp 满足条件 f(p)=g(p)f(p)=g(p)

输入格式

输入 nnmm,表示 1n1-n 的排列,以及确定了前 mm 个数。

接下来一行包含 mm 个数,表示排列中确定的前 mm 个数。

输出格式

输出一行,表示有多少个排列满足条件,输出答案mod109+7\mod 10^9+7

3 0
5 2 1 4
5
3

数据规模与约定

对于 100%100\% 的数据,n2000,mnn\le 2000,m\le n