Pagini recente » Cod sursa (job #2274474) | Cod sursa (job #3226430) | Cod sursa (job #3224234) | Cod sursa (job #2720582) | Cod sursa (job #2454585)
#include <iostream>
#include <fstream>
using namespace std;
#define maxn 6000000
#define inf 1 << 30
int suma_max(int a[maxn], int n, int &inceput, int &final){
int sum[maxn], best[maxn];
sum[0] = 0;
for(int i = 1; i <= n; i++){
sum[i] = a[i] + sum[i-1];
}
int ok = 0;
int max = -99999;
for(int i = 1; i <= n; i++){
if(a[i] > 0){
ok = 1;
}
}
if(ok == 0){
for(int i = 1; i <= n; i++){
if(max < a[i]){
max = a[i];
inceput = final = i;
}
}
return max;
}
int inceput_temp = 1;
int min = sum[0];
int bestsum = -inf;
for(int i = 1; i <= n; i++){
best[i] = sum[i] - min;
if(min > sum[i]){
min = sum[i];
inceput_temp = i + 1;
}
if(bestsum < best[i]){
bestsum = best[i];
inceput = inceput_temp;
final = i;
}
}
return bestsum;
}
int main(){
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int a[maxn], n, inceput, final;
int bestsum;
fin >> n;
for(int i = 1; i <= n; i++){
fin >> a[i];
}
bestsum = suma_max(a, n, inceput, final);
fout <<bestsum<<" "<<inceput<<" "<<final<<'\n';
return 0;
}