Pagini recente » Cod sursa (job #2116914) | Cod sursa (job #1009775) | Cod sursa (job #1450944) | Cod sursa (job #847992) | Cod sursa (job #788979)
Cod sursa(job #788979)
#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, int start, int end) : 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 best = INT_MIN;
int start = 0, end = 0;
int sum = 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 )
best = sum, end = i;
}
return seq(best, start + 1, end + 1);
}
int main()
{
vector<int> v;
read(v);
seq best = ssm(v);
ofstream out(OUT);
out << best;
return 0;
}