hdu-4991 Ordered Subsequence(dp+树状数组)
题目链接:
Ordered Subsequence
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
Your program, when given the numeric sequence, must find the number of its ordered subsequence with exact m numbers.
Process to the end of file.
[Technical Specification]
1<=n<=10000
1<=m<=100
- /*4991 655MS 9664K 1701 B G++ 2014300227*/
- #include <bits/stdc++.h>
- using namespace std;
- const int N=1e4+;
- typedef long long ll;
- const ll mod=;
- int n,m;
- ll sum[N],dp[][N];
- int lowbit(int x)
- {
- return x&(-x);
- }
- void update(int x,ll num)
- {
- while(x<=n)
- {
- sum[x]+=num;
- sum[x]%=mod;
- x+=lowbit(x);
- }
- }
- ll query(int x)
- {
- ll s=;
- while(x>)
- {
- s+=sum[x];
- s%=mod;
- x-=lowbit(x);
- }
- return s;
- }
- struct node
- {
- int num,pos,c,d;
- };
- node po[N];
- int cmp1(node x,node y)
- {
- if(x.num==y.num)return x.pos<y.pos;
- return x.num<y.num;
- }
- int cmp2(node x,node y)
- {
- return x.pos<y.pos;
- }
- int main()
- {
- while(scanf("%d%d",&n,&m)!=EOF)
- {
- for(int i=;i<=n;i++)scanf("%d",&po[i].num),po[i].pos=i;
- sort(po+,po+n+,cmp1);
- po[].num=-;
- for(int i=;i<=n;i++)
- {
- if(po[i].num==po[i-].num)
- {
- po[i].c=po[i-].c;
- }
- else po[i].c=i;//po[i].c表示第一个跟po[i].num相同的数的位置;
- po[i].d=i;//表示po[i]插入时的位置;
- }
- sort(po+,po+n+,cmp2);
- for(int i=;i<=n;i++)
- {
- dp[][i]=;
- update(po[i].d,);
- }
- for(int i=;i<=m;i++)
- {
- memset(sum,,sizeof(sum));
- for(int j=;j<=n;j++)
- {
- if(po[j].c>)
- dp[i][j]=query(po[j].c-);//转移方程;
- else dp[i][j]=;
- update(po[j].d,dp[i-][j]);//把dp[i-1][j]更新上去;
- }
- }
- ll ans=;
- for(int i=;i<=n;i++)
- {
- ans+=dp[m][i];
- ans%=mod;
- }
- printf("%lld\n",ans);
- }
- return ;
- }
hdu-4991 Ordered Subsequence(dp+树状数组)的更多相关文章
- HDU4991 Ordered Subsequence (树状数组优化DP)
dp[i][j]表示以a[i]结尾的长度为j的上升子序列个数. 方程:dp[i][j]=sum(dp[k][j-1]),a[k]<a[i],1<=k<i. 求解目标:sum(dp[k ...
- HDU 2836 Traversal 简单DP + 树状数组
题意:给你一个序列,问相邻两数高度差绝对值小于等于H的子序列有多少个. dp[i]表示以i为结尾的子序列有多少,易知状态转移方程为:dp[i] = sum( dp[j] ) + 1;( abs( he ...
- HDU 5489 Removed Interval DP 树状数组
题意: 给一个长度为\(N\)的序列,要删除一段长为\(L\)的连续子序列,问所能得到的最长的\(LIS\)的长度. 分析: 设\(f(i)\)表示以\(a_i\)结尾的\(LIS\)的长度,设\(g ...
- 树形DP+树状数组 HDU 5877 Weak Pair
//树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...
- bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)
1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 793 Solved: 503[Submit][S ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
- hdu 5517 Triple(二维树状数组)
Triple Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组
题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...
- 奶牛抗议 DP 树状数组
奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...
随机推荐
- Windows Server 2003中报PerfDisk “无法从系统读取磁盘性能信息。
Windows Server 2003中报PerfDisk “无法从系统读取磁盘性能信息.”的问题解决 2015-01-22 09:49:02 标签:Windows Server2003 PerfDi ...
- react/redux组件库、模板、学习教程
开源的有蚂蚁金服的: 1.https://pro.ant.design/index-cn 2.https://pro.ant.design/docs/getting-started-cn 3.http ...
- JavaScript中的Math方法演示
<html> <head> <script type="text/javascript"> var num = 12.4; alert(Math ...
- Python基础语法03-控制流
Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和 ...
- 【matlab】:matlab中不断的出现计算过程怎么办
这个问题是会常常性出的.就是matlab中不断的出现计算. 关于这个问题,我们须要考虑的是自己是不是写错了,通常会出现以下两种可能的错误 1,关于计算的函数没有写分号 :这样的是致命问题,假设函数不写 ...
- Ural 2018The Debut Album(DP)
题目地址:Ural 2018 简单DP.用滚动数组. 代码例如以下: #include <iostream> #include <cstdio> #include <st ...
- Item 51:写new和delete时请遵循惯例
Item 51: Adhere to convention when writing new and delete. Item 50介绍了怎样自己定义new和delete但没有解释你必须遵循的惯例. ...
- 安装mongoDB遇见的一个路径问题
如果安装路径不存在,则不会解压EXE软件! 安装monogoDB后,它不会自动添加执行路径! 意思就是安装路径是D盘下面的mongoDB文件夹,假如不存在这个文件夹,则不会安装成功 你需要添加路径: ...
- C 标准库 - <signal.h>
C 标准库 - <signal.h> 简介 signal.h 头文件定义了一个变量类型 sig_atomic_t.两个函数调用和一些宏来处理程序执行期间报告的不同信号. 库变量 下面是头文 ...
- 微信小程序制作商 业务流程