传送门

题解传送门

//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
const int N=;
#define mo 1000000007
int n,q,x[N],y[N],rank[N];
int cnt[N],A[N][N];long long dp[][N][N],sum[N][N]; bool mycmp(int a,int b) { return x[a]<x[b]; } void init() {
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)scanf("%d",&x[i]);
for(int i=;i<=n;i++)y[i]=i;
sort(y+,y++n,mycmp);
for(int i=;i<=n;i++)rank[y[i]]=i;
return ;
} #define dp(i,j,k) dp[(i)%2][j][k]
void solve(int l,int r,int now) {
for(int i=l;i<=r;i++) for(int j=l;j<=r;j++)dp(,i,j)=dp(,i,j)=;
dp(,l,r)=;
long long ct;
for(int k=;k<=q;k++) {
for(int i=l;i<=r;i++) {
ct=;
for(int j=r;j>=i;j--) {
dp(k,i,j)=ct; ct=(ct+dp(k-,i,j)*(n-j))%mo;
}
}
for(int j=l;j<=r;j++) {
ct=;
for(int i=l;i<=j;i++) {
dp(k,i,j)=(dp(k,i,j)+ct)%mo; ct=(ct+dp(k-,i,j)*(i-));
}
}
for(int i=l;i<=r;i++) {
for(int j=i;j<=r;j++) {
dp(k,i,j)=(dp(k,i,j)+(dp(k-,i,j)*A[i][j]))%mo;
}
}
}
for(int i=l;i<=r;i++) {
ct=;
for(int j=r;j>=i;j--) {
ct=(ct+dp(q,i,j));
sum[j][rank[now]]=(ct+sum[j][rank[now]])%mo;
}
}
return ;
} int main() {
#ifdef DEBUG
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
init();
int l,r;
for(int i=;i<=n;i++) cnt[i]=i*(i+)/;
for(int i=;i<=n;i++) for(int j=i;j<=n;j++) A[i][j]=cnt[i-]+cnt[n-j]+cnt[j-i+];
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++) {
l=r=i;
while(l && x[l]<=x[i])l--; while(r<=n && x[r]<=x[i])r++;
solve(l+,r-,i);
}
int ans;
for(int i=;i<=n;i++) {
ans=;
for(int j=;j<=n;j++) {
if(!sum[i][j])continue;
for(int u=;u<j;u++)sum[i][j]=(sum[i][j]-sum[i][u])%mo;
ans=((long long)ans+1ll*x[y[j]]*sum[i][j])%mo;
}
ans=(ans+mo)%mo;
if(i!=n) printf("%d ",ans);else printf("%d",ans);
} return ;
}

最新文章

  1. 【leetcode】Maximal Rectangle (hard)★
  2. post 的body json要使用双引号,而不是单引号
  3. POJ 2135
  4. MySQL 5.6 警告信息 command line interface can be insecure 修复
  5. 请列出你在从事IT生涯中,最难以忘怀的一次误操作
  6. Linux本地无法登录,远程却可以登录
  7. JavaDoc的生成规则---ShinePans
  8. 一个轻量级rest服务器
  9. view 上推效果
  10. ML—高斯判别分析
  11. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
  12. FORM当前状态分析
  13. android eclipse写layout文件失效问题解决
  14. [20190401]隐含参数_mutex_spin_count.txt
  15. Oracle命令行中显示:ORA-04076: 无效的 NEW 或 OLD 说明
  16. 浅谈Vector、ArrayList、LinkedList
  17. delphi压缩与解压_不需要特别的控件
  18. 构建NTP时间服务器
  19. android开发 静态碎片布局实现
  20. mac 比较两个文件

热门文章

  1. CSS——背景渐变
  2. 段错误 “段错误(segment fault)”、“非法操作,该内存地址不能read/write” 非法指针解引用造成的错误。
  3. NPM 使用介绍(包管理工具,解决NodeJS代码部署上的很多问题)
  4. MailHelper
  5. Web-动态页面
  6. PagedListCore的使用
  7. TKmybatis的框架介绍和原理分析及Mybatis新特性演示
  8. 一个tcp连接可以发多少http请求
  9. asp.net去除HTML标签
  10. 2016.10.6初中部上午NOIP普及组比赛总结