摘要: 题意:给定一个含有n个数的序列,从中找出连续长度不超过k的非空子序列,使其和最大。(n<=10^5,k<=10^5)解法:考虑最朴素的做法,用maxn[i]表示以i为结尾,长度不超过k的非空子序列的最大和,那么有maxn[i]=sum[i]-max{sum[i-1]...sum[i-k]},直接做的话时间复杂度O(n*k),看到表达式中后一部分,可以采用单调队列解决,维护一个sum[i]单调递增的单调队列,那么每次求解maxn[i]就可以直接取队列头,复杂度降到O(1),由于长度不大于k,所以每次插入之后还要删掉不满足条件的队头元素。。。 1 #include<cstdio& 阅读全文
posted @ 2012-12-05 23:29 silver__bullet 阅读(161) 评论(0) 推荐(0) 编辑