Problem Description

The description of this problem is very short. Now give you a string(length N), and ask you the max sum of the substring which the length can't small than M.

Input

The first line is one integer T(T≤20) indicates the number of the test cases. Then for every case, the first line is two integer N(1≤N≤1000000) and M(1≤M≤N).

Then one line contains N integer indicate the number. All the number is between -10000 and 10000.

Output

Output one line with an integer.

SampleInput

2
5 1
1 -2 -2 -2 1
5 2
1 -2 -2 -2 1

SampleOutput

1

-1

题意:T组数据,每组给n和m,n表示下面要给你的序列的长度,m表示要求的子连续序列的最短长度。接下来n个数给定序列。求一个长度大于等于m的子连续序列使得该序列所有元素之和最大。

思路:

比如第二个样例

5 2

1 -2 -2 -2 1

可以选择区间[1,2]包含1和-2,和为-1;也可以选择区间[4,5],和也为-1。

由于n有,所以的算法如果剪枝不好,比较容易TLE。

为描述方便,假设题目数据给我们的序列为数组a(下标从1-n),我们可以先预处理一个前缀和sum。

然后题目要求的就是最大的sum[r]-sum[l]:要求r–l+1 >= m,l>=1,r<=n。

这里的l的r分别表示区间左端点和右端点。我们可以从左到右遍历整个序列,由于要求的序列长度必须大于等于m,所以r要从m开始。

于是对于每一个r我们要求的是:当l满足1<=l<=r-m+1时,最小的sum[l](要sum[r]-sum[l]最大,sum[l]最小)。

那么我们只要在从左到右遍历的时候维护当前最小的sum[l]就可以了。

AC代码:562ms

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll; const ll INFLL = 0x7fffffffffffffffLL;
const int MAXN = ;
int a[MAXN];
ll sum[MAXN]; int main() {
int T, n, m, i;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
for(i = ; i <= n; i++) {
scanf("%d", &a[i]);
sum[i] = sum[i - ] + a[i];
}
int r = m;
ll mi = , ans = -INFLL;
while(r <= n) {
mi = min(sum[r - m], mi);
ans = max(ans, sum[r] - mi);
r++;
}
printf("%I64d\n", ans);
}
return ;
}

FOJ-2013 A Short Problem (前缀和)的更多相关文章

  1. 贪心 FZU 2013 A short problem

    题目传送门 /* 题意:取长度不小于m的序列使得和最大 贪心:先来一个前缀和,只要长度不小于m,从m开始,更新起点k最小值和ans最大值 */ #include <cstdio> #inc ...

  2. FZU2013 A short problem —— 线段树/树状数组 + 前缀和

    题目链接:https://vjudge.net/problem/FZU-2013  Problem 2013 A short problem Accept: 356    Submit: 1083Ti ...

  3. HDU----(4291)A Short problem(快速矩阵幂)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. hdu 4291 A Short problem(矩阵+取模循环节)

    A Short problem                                                          Time Limit: 2000/1000 MS (J ...

  5. HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)

    HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online) 题目链接http://acm.hdu.edu.cn/showp ...

  6. HDU 4291 A Short problem(矩阵+循环节)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. HDU——4291A Short problem(矩阵快速幂+循环节)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. 循环节 + 矩阵快速幂 - HDU 4291 A Short problem

    A Short problem Problem's Link Mean: 给定一个n,求:g(g(g(n))) % 1000000007 其中:g(n) = 3g(n - 1) + g(n - 2), ...

  9. hdu4291 A Short problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

随机推荐

  1. Educational Codeforces Round 32 E 二分

    题意:从数组中选几个(任意),使他们的和modm的值最大 题解:我一开始是直接暴力写,然后就会t 其实这题可以用二分的方法写,一半数组的值用来遍历,一般数组的值用来查询. 二分查询就能把时间继续缩短 ...

  2. JS DOM中getElement系列和querySelector系列获取节点

    节点查找方法 document.getElementById() 前面必须是document document.getElementsByName()  前面必须是document ele.getEl ...

  3. docker入门整理(1)--安装

    1.安装批量命令: CentOS7操作系统下. 包含卸载旧版本.安装依赖包.添加最新Yum源.安装docker-ce最新稳定版本.启动docker等: sudo yum remove docker \ ...

  4. linux---基础学习

    学习使用linux 偶然间看到一篇介绍linux的使用,于是看了看,整体看完,虽然看的有些懵✒,但还是坚持看完了基础部分,并做了一些摘要. man页面所属的分类标识 常用的是分类1和分类3 (1).用 ...

  5. 【Flutter】环境搭建以及HelloWorld创建

    平台:WIndows10 Android Studio VScode同理,具体可以参考Flutter中文站 配置环境 1.下载SDK,进入官网选择最新的即可.我这里选择的是v1.9.1+hotfix. ...

  6. android中常用的布局管理器(二)

    接上篇博客 (3)LinearLayout     线性布局管理器 线性布局管理器是将放入其中的组件按照垂直或水平方向来布局,每一行或每一列只能放一个组件,并且不会换行,当组件排列到窗体的边缘后,后面 ...

  7. input清空和重置select下拉框

    背景 一般页面搜索条件都会有input输入框和select选择框,同时页面上都会有重置reset按钮,这时就需要清空input和重置select 实现 清空input 清空单个input: $(&qu ...

  8. ps调整图片指定区域的颜色,两种方法

    参考链接:http://tech.wmzhe.com/article/12329.html

  9. numpy reshape -1

    来源:https://www.zhihu.com/question/52684594 z = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ...

  10. 怎么解决Chrome浏览器“Failed to load resource: net::ERR_INSECURE_RESPONSE”错误?

    用科学方法安装的arcgisServer,需要修改系统时间,但是修改了系统时间,可能会出各种问题, office 不能正确验证,chrome 不能正常使用,访问网页, 如果直接输入本地地址进行访问的话 ...