Pagini recente » Cod sursa (job #749494) | Cod sursa (job #1848689) | Statistici Alexandru Tabacaru (atabacaru) | Cod sursa (job #2207205) | Cod sursa (job #1334560)
#include <fstream>
#include <vector>
#include <numeric>
#include <limits>
using namespace std;
void read(vector<int>& out_data){
ifstream f("ssm.in");
int N, x;
f >> N;
for (int i = 0; i < N; i++){
f >> x;
out_data.push_back(x);
}
f.close();
}
void write(int maxSum, int minIdx, int maxIdx){
ofstream g("ssm.out");
g << maxSum << " " << minIdx << " " << maxIdx << std::endl;
g.close();
}
pair<int, pair<int, int> > findMax(const vector<int>&data){
vector<int> sums;
int begin, end, idx = 0 ;
int bestSum = numeric_limits<int>::min();
int sum = 0;
for (size_t i = 0; i < data.size(); ++i){
if (sum < 0){
sum = data[i];
idx = i;
}
else{
sum += data[i];
}
if (sum > bestSum){
bestSum = sum;
begin = idx;
end = i;
}
}
return make_pair(bestSum,make_pair(begin, end));
}
int main(){
vector<int> data;
read(data);
pair<int, pair<int, int> > result = findMax(data);
write(result.first, result.second.first + 1, result.second.second + 1);
return 0;
}