题目链接:https://cn.vjudge.net/contest/275079#problem/C

具体思路:我们可以分层的去建立,假设我们要找k层,我们可以先把满足1.2....k-1层的满足情况的找出来,然后就可以求出k层的了.这个过程需要线段树的维护,每一次我们先找出当前这个在满足情况下的个数,然后不停的往下跟新就可以了.

AC代码:

#include<iostream>
#include<cstring>
#include<iomanip>
#include<stdio.h>
#include<cmath>
using namespace std;
# define inf 0x3f3f3f3f
# define ll long long
const int mod = 1e9 ;
const int maxn = 100000+100;
ll a[maxn];
ll ans[maxn];
ll dp[maxn][100];
ll n,m;
int lowbit(int t)
{
return t&(-t);
}
void update(int t,int d)
{
while(t<=n)
{
a[t]=(a[t]+d)%mod;
t+=lowbit(t);
}
}
int query(int t)
{
ll ans=0;
while(t>0)
{
ans=(ans+a[t])%mod;
t-=lowbit(t);
}
return ans;
}
int main()
{ scanf("%lld %lld",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%lld",&ans[i]);
}
for(int i=1; i<=n; i++)
{
dp[i][1]=1;
}
for( int i=2; i<=m; i++)
{
memset(a,0,sizeof(a));
for(int j=1; j<=n; j++)
{
dp[j][i]=(mod+query(n)-query(ans[j]))%mod;// 每一次寻找
update(ans[j],dp[j][i-1]);
}
}
ll sum=0;
for(int i=1; i<=n; i++)
{
sum=(sum+dp[i][m]+mod)%mod;
}
printf("%lld\n",sum);
return 0;
}

最新文章

  1. CSS3 Border-image
  2. spring logback 配置
  3. 技术博客(初用markdown)
  4. [原创]Android系统中常用JAVA类源码浅析之HashMap
  5. NVelocity的基本用法
  6. lavarel框架中如何使用ajax提交表单
  7. SQL常见的可优化点
  8. Javascript中parentNode的用法
  9. yum install错误 系统环境:Oracle Linux5.4 在通过yum安装软件时出现以下错误:
  10. u-boot 环境变量参数设置
  11. int 指令
  12. MySQL查询
  13. 《第一行代码》学习笔记35-服务Service(2)
  14. 优秀的前端project如何制定一个老师--html学习路径
  15. MyBatis_CURD
  16. Linkin大话PC常用快捷键
  17. Maven插件一览
  18. SQL字符串处理!
  19. 基于.Net进行前端开发的技术栈发展路线(一)
  20. Why I don&#39;t want use JPA anymore

热门文章

  1. SQL中 ALL 和 ANY 区别的
  2. bzoj2386 [CEOI2011] Team
  3. 再谈获取网站图标Icon
  4. BZOJ4719 NOIP2016天天爱跑步(线段树合并)
  5. JS中数组和字符串具有的方法,以及substring,substr和slice的用法与区别
  6. 【题解】NOIP2017时间复杂度
  7. 【刷题】BZOJ 2096 [Poi2010]Pilots
  8. 9个基于Java的搜索引擎
  9. Linux内核设计与实现第五周读书笔记
  10. 洛谷10月月赛R2&#183;浴谷八连测R3题解