Pagini recente » Cod sursa (job #673283) | Cod sursa (job #1414411) | Cod sursa (job #1956998) | Cod sursa (job #2533135) | Cod sursa (job #2928363)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
#define MAX_N 6000002
//#define MAX_N 62
int input_array[MAX_N] = {0};
int partial_sums[MAX_N] = {0};
int main() {
int N = 0;
ifstream cinfile("ssm.in");
ofstream coutfile("ssm.out");
// index from 1!
cinfile >> N;
for (int i = 1; i <= N; i++) {
cinfile >> input_array[i];
}
//1. Generate the array of partial sums corresponding to
// input_array
int sum_1_to_j = 0;
for (int j = 1; j <= N; j++) {
sum_1_to_j += input_array[j];
partial_sums[j] = sum_1_to_j;
}
//2. For each right-end "j", compute the left-end "i" so that sum(i,j) is maxim.
// This sum(i,j) is a candidate solution.
// The final solution is the maxim of all the sum(i,j).
int min_partial_sum = INT_MAX;
int max_sum = INT_MIN;
int pos_i = 0;
int pos_j = 0;
for (int j = 1; j <= N; j++) {
if (partial_sums[j] < min_partial_sum) {
min_partial_sum = partial_sums[j];
pos_i = j + 1;
}
// partial_sums[j] - min_partial_sum is another sum(pos_i, j)
if (partial_sums[j] - min_partial_sum > max_sum) {
max_sum = partial_sums[j] - min_partial_sum;
pos_j = j;
}
}
coutfile << max_sum << " " << pos_i << " " << pos_j << endl;
return 0;
}