BestCoder Round#8 1003
dp[i][j] 表示以i结尾的长度为j的递增子序列
dp[i][j] = sum(dp[k][j]) k<i && a[i] >a[j]
如果只是单纯的循环
for(j=2; j<=m; ++j)
for(i=1; i<=n; ++i)
for(k=1; k<i; ++k)
if(a[i] > a[j])
dp[i][j] += dp[k][j-1];
时间复杂度是O(n * n * m) TLE
但是k循环可以用树状数组来优化,k循环可以看做是一个区间求和的过程,即求出小于i的dp[k][j-1]有多少个
那么时间复杂度变为O(n * m * logn)
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = + ; LL a[N],b[N],c[N];
int n;
LL dp[N][N];
int lowbit(int t)
{
return t & (-t);
}
void update(int pos, LL val)
{
while(pos <= n)
{
c[pos] += val;
pos += lowbit(pos);
}
}
LL query(int pos)
{
LL ans = ;
while(pos >= )
{
ans += c[pos] % ;
pos -= lowbit(pos);
}
return ans;
}
int main()
{
int m, i, j;
while(scanf("%d%d",&n, &m) != EOF)
{
memset(dp, , sizeof(dp)); for(i=; i<=n; ++i)
{
dp[i][] = ;
scanf("%I64d",&a[i]);
b[i] = a[i];
}
sort(b+, b+n+);
for(j=; j<=m; ++j)
{
memset(c, , sizeof(c));
for(i=; i<=n; ++i)
{
int index = lower_bound(b+, b+n+,a[i]) - b ;//离散化,index 表示a[i]在数列中第几大
dp[i][j] = query(index-);//找出小于index的长度为j-1的递增子序列有多少个
update(index,dp[i][j-]);//更新以i结尾的,长度为j-1的递增子序列有多少个
}
}
LL ans = ;
for(i=; i<=n; ++i)
ans = (ans + dp[i][m]) % ;
printf("%I64d\n",ans);
}
}
BestCoder Round#8 1003的更多相关文章
- 从lca到树链剖分 bestcoder round#45 1003
bestcoder round#45 1003 题,给定两个点,要我们求这两个点的树上路径所经过的点的权值是否出现过奇数次.如果是一般人,那么就是用lca求树上路径,然后判断是否出现过奇数次(用异或) ...
- HDU 5682/BestCoder Round #83 1003 zxa and leaf 二分+树
zxa and leaf Problem Description zxa have an unrooted tree with n nodes, including (n−1) undirected ...
- BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]
传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- BestCoder Round #87 1003 LCIS[序列DP]
LCIS Accepts: 109 Submissions: 775 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65 ...
- BestCoder Round #75 1003 - King's Order
国王演讲后士气大增,但此时战争还没有结束,国王时不时要下发命令. 由于国王的口吃并没有治愈,所以传令中可能出现:“让第三军-军-军,到前线去” 这样的命令.由于大洋国在军队中安插了间谍 , 战事紧急, ...
- BestCoder Round#11div2 1003
----- 有时候如果枚举起点超时,那么试试枚举终点. 枚举每一个i为终点(0<= i < n),且维护起点下标startPos 对于终点i,cnt[str[i]] ++, 如果小于等 ...
- ACM学习历程—HDU5592 ZYB's Premutation(逆序数 && 树状数组 && 二分)(BestCoder Round #65 1003)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5592 题目大意就是给了每个[1, i]区间逆序对的个数,要求复原原序列. 比赛的时候2B了一发. 首先 ...
- BestCoder Round #86 1003
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:有多少个区间里的第 k 大的数不小于 m 解法:尺取法,首先我们用dp[i]保存到i的位置有多 ...
- BestCoder Round #47 1003
solution : 就按题解敲了一遍,好久没写这种dp ; ; LL f[MAX][MAX]; ]; scanf( scanf(,b+); ...
随机推荐
- mysql iot 主键自增列问题
mysql 如何避免热点块? 主键按sn自增列 Oracle 可以通过翻转索引 比如 插入101 102 103 104 变成101 201 301 401 分散数据 反转索引坏处,无法index r ...
- ibatis新手入门
ibatis 是什么 iBATIS是以SQL为中心的持久化层框架. 能支持懒载入.关联查询.继承等特性. iBATIS不同于一般的OR映射框架. OR映射框架,将数据库表.字段等映射到类.属性,那是一 ...
- 手把手教你_android自己主动化实践方案选型
接到一个android自己主动化的任务,看了看手中的家伙:ranorex,appium,uiautomator 当然先捡商用的试试,简单呀,能够录制回放,只是不是抱特别大的期望,这个爷比較娇气,要是a ...
- (四)SAX方式解析XML数据
SAX方式解析XML数据 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 一.XML和Json数据的引入: 通常情况下,每个需要访问网络的应用程 ...
- 在浏览器中通过bartender,调用条码打印机的active控件代码的实现
系统中须要在浏览器,直接调用条码打印机,打印出产品条码. 现实中的条码打印机,品种繁多,非常难在一个程序中实现, 于是我们用已经支持全部条码打印机的bartender软件 调用它的api ,来实如今浏 ...
- 广东省-IT公司红黑榜排名
红榜Top100 Order Company Name Point Change 1 百富计算机技术(深圳)有限公司 94.00 -- 2 中国网通广州分公司 88.00 -- 3 深圳市汇 ...
- poj 1743 男人八题之后缀数组求最长不可重叠最长重复子串
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14874 Accepted: 5118 De ...
- SLB 权重问题
<pre name="code" class="html">一般配置SLB的时候有个权重0到100,是如何选择数值的? 权重需要您根据后端机器的配置 ...
- firebug使用
查看网页的header是优化web应用的关键一环,从header中,可以检查到非常 多的信息:网页在squid中的缓存时间(age).客户端缓存时间(expires).是否有最后修改时间(last-m ...
- A Game of Thrones(18) - Catelyn
“We will make King’s Landing within the hour.” Catelyn turned away from the rail and forced herself ...