Pagini recente » Cod sursa (job #1770664) | Cod sursa (job #233472) | Cod sursa (job #507340) | Cod sursa (job #2968688) | Cod sursa (job #595791)
Cod sursa(job #595791)
/***************************************************
* Author: Alexandru Palcuie
* Country: Romania
* Email: alex [dot] palcuie [at] gmail [dot] com
* Website: http://palcu.blogspot.com/
* Year: 2011
****************************************************/
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <queue>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
using namespace std;
typedef vector<int> VI;
typedef vector<pair<int,int> > VPI;
typedef pair<int,int> PII;
typedef long long LL;
typedef unsigned long long ULL;
//Constants
const int NMAX = 50005;
//Global Vars
int n, lgMin;
int parSums[NMAX], v[NMAX];
//Structs
//Solve Functions
inline void debug_vector(int* v){
for(int i=0;i<n;++i)
printf("%d ",v[i]);
printf("\n");
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("secv2.in","r",stdin);
freopen("secv2.out","w",stdout);
#endif
scanf("%d%d",&n,&lgMin);
int i,j;
for(i=1; i<=n; ++i){
scanf("%d",&v[i]);
parSums[i] = parSums[i-1] + v[i];
}
//debug_vector(parSums);
int lmin = 0, lmax = parSums[lgMin];
int pmin = 0, pmax = lgMin;
for(i=1, j=lgMin+1; j<=n; ++i, ++j){
if (parSums[i]<lmin) {
if (i+lgMin>pmax){
if(parSums[j]-parSums[i] > lmax - lmin){
lmin = parSums[i];
lmax = parSums[j];
pmin = i;
pmax = j;
}
}
else{
lmin=parSums[i];
pmin = i;
}
}
if (parSums[j]>lmax){
lmax=parSums[j];
pmax = j;
}
}
printf("%d %d %d\n",pmin+1,pmax,lmax-lmin);
return 0;
}