HDU3415
2015-06-18 09:47
267 查看
题目大意:
给出一个有N个数字(-1000..1000,N<=10^5)的环状序列,找出一个长度不大于k的连续子序列,使其和最大。
分析:
我们可以将环状序列从某处切开,变成一行,然后复制前n-1个数字到后面,得到一个2*n-1的序列。问题即转换为在该2*n-1的序列中求长度不超过k的最大连续字段和。
预处理出前缀和,记为s。j到i的子段和即为s[i]-s[j-1]。现在只需要对每一个元素i,找出区间[i-k+1,i]中s的最小值即可。这就是一个简单的单调队列问题了。
维护一个记录s的最小值的单调队列(递增的)即可。转移是O(1)的,所以总的复杂度是O(n)的。
给出一个有N个数字(-1000..1000,N<=10^5)的环状序列,找出一个长度不大于k的连续子序列,使其和最大。
分析:
我们可以将环状序列从某处切开,变成一行,然后复制前n-1个数字到后面,得到一个2*n-1的序列。问题即转换为在该2*n-1的序列中求长度不超过k的最大连续字段和。
预处理出前缀和,记为s。j到i的子段和即为s[i]-s[j-1]。现在只需要对每一个元素i,找出区间[i-k+1,i]中s的最小值即可。这就是一个简单的单调队列问题了。
维护一个记录s的最小值的单调队列(递增的)即可。转移是O(1)的,所以总的复杂度是O(n)的。
相关文章推荐
- fopen() 返回 NULL, 奇葩原因:当前进程打开多个句柄,忘记关闭。(bug)
- 可变参数和不可变参数的比较
- 1030. Travel Plan (30)
- Changes in Microsoft Dynamics AX 2012 InventTrans data model
- c语言: 修改参数的地址,及注意事项
- 使用 Google Fonts 为网页添加美观字体
- 浅谈Jquery核心函数
- Android开发第二阶段(1)
- 支持向量机(一)
- Android 解决65535的限制 使用android-support-multidex解决Dex超出方法数的限制问题,让你的应用不再爆棚
- 经典位操作
- batch批处理基础
- bootstrap(2)
- win32: 静态控件(Static) - SS_NOTIFY - 响应事件
- Android开发第二阶段(1)
- 读良葛格"初心者之路"有感
- C#基础语法:可空类型详解
- 通过事件调用窗体间的方法
- vc 不能将参数 1 从const char [*]转换为LPCWSTR
- IT相关找工作时间表