Pagini recente » Cod sursa (job #1810993) | Cod sursa (job #3172818) | Cod sursa (job #1849646) | Cod sursa (job #1174334) | Cod sursa (job #788982)
Cod sursa(job #788982)
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstdlib>
#include <climits>
#define IN "ssm.in"
#define OUT "ssm.out"
using namespace std;
void read(vector<int> &v)
{
ifstream in(IN);
if( false == in.good() )
{
cerr << "Can't open input file" << endl;
exit(1);
}
int n;
in >> n;
v.reserve(n);
istream_iterator<int> begin(in);
istream_iterator<int> end;
back_insert_iterator< vector<int> > add(v);
copy(begin, end, add);
}
void print(vector<int> &v)
{
ofstream out(OUT);
if( false == out.good() )
{
cerr << "Can't open output file" << endl;
exit(1);
}
copy(v.begin(), v.end(), ostream_iterator<int>(out, " "));
out << endl;
}
struct seq
{
int sum;
int start;
int end;
seq(int sum = 0, int start = 0, int end = 0) : sum(sum), start(start), end(end) {}
};
ostream& operator<<(ostream &out, const seq &s)
{
out << s.sum << " " << s.start << " " << s.end;
return out;
}
seq ssm(vector<int> &v)
{
int start = 0;
int sum = 0;
seq best(INT_MIN, 0, 0);
for(size_t i = 0; i < v.size(); ++i)
{
if( sum < 0 )
sum = v[i], start = i;
else
sum += v[i];
if( best.sum < sum )
best.sum = sum, best.start = start + 1, best.end = i + 1;
}
return best;
}
int main()
{
vector<int> v;
read(v);
seq best = ssm(v);
ofstream out(OUT);
out << best;
return 0;
}