求和
求和
题目描述:
出题人很困,所以不编题面了。
给一个长度为n的序列,你需要求出其中连续m个数的和的最大值是多少。
输入:
第一行给出一个数字T,表示数组总数 (t<100)
每组数据的第一行有两个数字 n,m (0<m≤n≤1e5)
第二行有n个数字ai (0<ai<1e9)
输出:
对于每组数据,输出最大的连续m个数之和
样例输入:
2
5 2
2 5 4 1 6
8 3
3 5 8 2 1 8 9 7
样例输出:
9
24
题解:
一道简单地前缀和。
/**********************************************************
* @Author: Maple
* @Date: 2020-02-21 10:02:17
* @Last Modified by: Maple
* @Last Modified time: 2020-02-21 10:07:59
* @Remark:
**********************************************************/
#include <bits/stdc++.h>
#define lowbit(x) (x&(-x))
#define CSE(x,y) memset(x,y,sizeof(x))
#define INF 0x3f3f3f3f
#define Abs(x) (x>=0?x:(-x))
#define FAST ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll , ll> pll;
const int maxn = 1e5+100;
ll n,m,sum[maxn];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
#endif
int t;
cin >> t;
while(t--){
cin >> n >> m;
for(int i = 1;i <= n;i++){
scanf("%lld",&sum[i]);
sum[i] += sum[i-1];
}
ll ans = 0;
for(int i = 0;i+m <= n;i++){
ans = max(sum[i+m] - sum[i],ans);
}
cout << ans << endl;
}
return 0;
}