这真的是蓝题吗……
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=501,M=1e6+1,p=1e9+7;
int n,m,a[N],ls[N],rs[N],st[N],l,sz[N],dp[N][N],g[N][N],fac[M]={1,1},inv[M]={1,1};
void getsz(int x){
sz[x]=1;
if(ls[x]) getsz(ls[x]),sz[x]+=sz[ls[x]];
if(rs[x]) getsz(rs[x]),sz[x]+=sz[rs[x]];
}
int A(int n,int m){
if(m>n) return 0;
return fac[n]*inv[n-m]%p;
}
int f(int n,int m,int k){
return A(n,k)*A(m,k)%p*inv[k]%p;
}
void dfs(int u,int low){
int w=a[u]-low;
if(!ls[u]&&!rs[u]){
for(int i=1;i<=m;i++) dp[u][i]=f(w,sz[u],i);
return;
}
if(!ls[u]||!rs[u]){
int v=(ls[u]?ls[u]:rs[u]);
dfs(v,a[u]);
for(int i=1;i<=m;i++) for(int j=0;j<=i;j++) (g[u][i]+=dp[0][j]*dp[v][i-j])%=p;
for(int i=1;i<=m;i++) for(int j=0;j<=i;j++) (dp[u][i]+=g[u][j]*f(w,sz[u]-j,i-j))%=p;
return;
}
dfs(ls[u],a[u]);
dfs(rs[u],a[u]);
for(int i=1;i<=m;i++) for(int j=0;j<=i;j++) (g[u][i]+=dp[ls[u]][j]*dp[rs[u]][i-j])%=p;
for(int i=1;i<=m;i++) for(int j=0;j<=i;j++) (dp[u][i]+=g[u][j]*f(w,sz[u]-j,i-j))%=p;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
int r=l;
while(l&&a[st[l]]>a[i]) l--;
if(l) rs[st[l]]=i;
if(l<r) ls[i]=st[l+1];
st[++l]=i;
}
getsz(st[1]);
for(int i=2;i<M;i++) fac[i]=fac[i-1]*i%p;
for(int i=2;i<M;i++) inv[i]=(p-p/i)*inv[p%i]%p;
for(int i=2;i<M;i++) inv[i]=inv[i]*inv[i-1]%p;
for(int i=1;i<=n;i++) dp[i][0]=g[i][0]=1;
dfs(st[1],0);
cout<<dp[st[1]][m];
}