Pagini recente » Borderou de evaluare (job #1378287) | Borderou de evaluare (job #2148218) | Monitorul de evaluare | Borderou de evaluare (job #1302857) | Cod sursa (job #3316800)
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int sum[6000001], mins[6000001];
vector<long long>poz(6000001, -2147483649);
int main()
{
int n, x, maxi = INT_MIN, fst, sec;
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> x;
sum[i] = sum[i - 1] + x;
}
int cnt = 1;
mins[1] = 1;
for(int i = 2; i <= n; i ++){
if(sum[i] < sum[mins[cnt]]){
mins[++ cnt] = i;
}
}
for(int i = 1; i <= n; i ++){
poz[mins[i]] = mins[i];
}
long long last = 0;
for(int i = 1; i <= n; i ++){
if(poz[i] != -2147483649){
swap(poz[i], last);
}
else
poz[i] = last;
}
for(int i = 1; i <= n; i ++){
if(maxi < sum[i] - sum[poz[i]]){
maxi = sum[i] - sum[poz[i]];
fst = poz[i] + 1;
sec = i;
}
}
cout << maxi << ' ' << fst << ' ' << sec;
}