传送门

题解传送门

//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 ;
}

bzoj4574:Zjoi2016线段树 dp的更多相关文章

  1. BZOJ4574 [Zjoi2016]线段树

    比较厉害的dp. 网上题解都是利用了随机的条件,用了一个$O(n^4)$的dp,这里简单说一下. 用f(x,i,l,r)表示经过前i轮操作,[l,r]的所有数<=x,且l-1和r+1都>x ...

  2. Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)

    [题目链接] http://www.tsinsen.com/A1219 [题意] 给定一棵树,a[u][i]代表u结点分配i人的收益,可以随时改变a[u],查询(u,v)代表在u子树的所有节点,在u- ...

  3. HDU 3016 Man Down (线段树+dp)

    HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  4. lightoj1085 线段树+dp

    //Accepted 7552 KB 844 ms //dp[i]=sum(dp[j])+1 j<i && a[j]<a[i] //可以用线段树求所用小于a[i]的dp[j ...

  5. [CF 474E] Pillars (线段树+dp)

    题目链接:http://codeforces.com/contest/474/problem/F 意思是给你两个数n和d,下面给你n座山的高度. 一个人任意选择一座山作为起始点,向右跳,但是只能跳到高 ...

  6. HDU-3872 Dragon Ball 线段树+DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段, ...

  7. HDU4521+线段树+dp

    题意:在一个序列中找出最长的某个序列.找出的序列满足题中的条件. 关键:对于 第 i 个位置上的数,要知道与之相隔至少d的位置上的数的大小.可以利用线段树进行统计,查询.更新的时候利用dp的思想. / ...

  8. Codeforces Round #343 (Div. 2) D - Babaei and Birthday Cake 线段树+DP

    题意:做蛋糕,给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和. 思路:首先离散化蛋糕体积,以蛋糕数量建树建树,每个节点维护最大值,也就是假如节点i放在最上层情况 ...

  9. Special Subsequence(离散化线段树+dp)

    Special Subsequence Time Limit: 5 Seconds      Memory Limit: 32768 KB There a sequence S with n inte ...

随机推荐

  1. 「题解」:X国的军队

    问题 A: X国的军队 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 简单贪心. 按照存活的士兵数量(即参加战斗的士兵数量减去阵亡的士兵数量)排序. 若存活士兵数量相 ...

  2. (转)JNI入门教程之HelloWorld篇 .

    转: http://blog.csdn.net/mingjava/article/details/180946 本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第 ...

  3. windows 映射samba Linux服务器,输入正确的账号密码却提示“ 指定的网络密码不正确

    重启Linux samba服务也没用,重启Linux和windows系统也没用,急!!! 最佳答案 linux中要添加对应的系统用户和samba用户useradd titiansmbpasswd -a ...

  4. python基础语法(变量与数据类型)

    python基础语法(变量与数据类型) 一.python变量 python中的变量不需要声明.每个变量在使用钱都需要赋值,变量赋值以后,该变量才会被创建 在python中,变量就是变量,它没有类型,我 ...

  5. Luogu P2079 烛光晚餐(背包)

    P2079 烛光晚餐 题意 题目背景 小明准备请小红去一家咖啡厅,共进烛光晚餐.小红高兴地和他一起去了咖啡厅. 题目描述 小红说:"小明,你点菜吧."小明看到菜单上有\(N\)道菜 ...

  6. QSerialPort类

    一.简介     QSerialPort类是Qt5封装的串口类,可以与串口进行通信.QSerialPortInfo是一个辅助类,提供串口的一些信息,如可用的串口名称,描述,制造商,序列号,串口16位产 ...

  7. CSS - 选择器相关

    1. 标签选择器 /* 标签选择器 : 会将样式作用在当前网页所有的指定标签上 标签名 { 样式名1: 样式值1; 样式名2: 样式值2; ...... } */ table { width: 300 ...

  8. SpringBoot_Mybatis MyBatisPlus

    一.SpringBoot中使用Mybatis springBoot中使用mybatis跟以前spring中使用方法一样. 1.mybatis配置: spring: datasource: url: j ...

  9. 廖雪峰Java13网络编程-1Socket编程-3TCP多线程编程

    TCP多线程编程 一个ServerSocket可以和多个客户端同时建立连接,所以一个Server可以同时与多个客户端建立好的Socket进行双向通信. 因此服务器端,当我们打开一个Socket以后,通 ...

  10. Android 之 BroadcaseReceiver

    1.在AndroidManifest.xml中注册 <receiver android:name=".MyReceiver"> <intent-filter &g ...