数数
来源:互联网 发布:开淘宝店一定要电脑吗 编辑:程序博客网 时间:2024/04/29 09:59
Description
给出一个长度为N的整数序列,选择长度不超过K的段,使总和最大
Simple Input
3 2
1 2 3
Simple Output
5
Hint
1<=K<=N<=10^5
abs(a[i])<=10^9
解题思路
先预处理前缀和sum[i],每段的和等于sum[i]-sum[x],就是用一个队列来做。每次把队头取出来,队头若小于i-k那么就出队,每次队尾若位置小于sum[i]但位置比i前的就删掉。
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<cmath>const int N=100001; long long sum[N],p[N],a[N];using namespace std;int main(){ long long n,tot,k,ans; scanf("%lld%lld",&n,&k); for (int i=1;i<=n;i++) { scanf("%lld",&a[i]); sum[i]=sum[i-1]+a[i]; } int head,tail; head=1; tail=1; ans=a[1]; for (int i=1;i<=n;i++) { while (p[head]<=i-k-1 && head<=tail) head++; tot=sum[i]-sum[p[head]]; ans=max(tot,ans); while (sum[p[tail]]>=sum[i] && (head<=tail)) tail--; p[++tail]=i; } printf("%lld\n" ,ans);}
0 0
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- 数数
- zoj Gamblers(hash)
- 欢迎使用CSDN-markdown编辑器
- 闭包(待补充)
- 使用递归输出1-100;9*9乘法表
- IIS安装配置
- 数数
- UE4.14 Animation Features
- 前后端接口规范-------实体定义2
- SpringMVC 自定义转换器
- 图像的高斯平滑C++实现
- java:读取图像RGB信息
- ES2015字符串的扩展
- MySQL中的各种引擎
- Eclipse An internal error occurred during: "Initializing Java Tooling"