Pagini recente » Cod sursa (job #2880444) | Cod sursa (job #3213114) | Cod sursa (job #2437817) | Cod sursa (job #86117) | Cod sursa (job #3208377)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ssm.in");
ofstream out("ssm.out");
const int NMAX = 6e6+5;
const int INF = 0x3f3f3f3f;
int n, x, s[2], maxi=-INF, inds, indf;
pair<int, int> smin[2];
int main()
{
in>>n;
for (int i=1; i<=n; i++)
{
in>>x; //s[0] smin[0] -> sumele precedente (i-1)
s[1]=s[0]+x;
if (s[1]<smin[0].first)
smin[1].first = s[1], smin[1].second = i;
else smin[1].first = smin[0].first, smin[1].second = smin[0].second;
//suma minima dintre sumele de la 1 la 2, 3, ..., i
if (s[1]-smin[1].first>maxi) //o ia doar pe prima deci cu inds cel mai mic
maxi = s[1]-smin[1].first, inds = smin[1].second+1, indf = i;
if (s[1]-smin[1].first==maxi && i - (smin[1].second+1) +1 < indf-inds + 1) //lungime mai scurta
inds = smin[1].second+1, indf = i;
s[0] = s[1];
smin[0] = smin[1];
}
out<<maxi<<' '<<inds<<' '<<indf;
}