Pagini recente » Cod sursa (job #1919658) | Cod sursa (job #2775533) | Cod sursa (job #2318100) | Cod sursa (job #2775889) | Cod sursa (job #2433497)
// Copyright Gheoace Mihai, 27.06.2019
#pragma warning(disable : 4996)
#include <cstdio>
#include <vector>
using namespace std;
template < class T>
class Pair {
T first;
T second;
public:
Pair() {};
Pair(T const& x, T const& y) {
first = x;
second = y;
}
Pair(Pair<T> const& cp) {
first = cp.getFirst();
second = cp.getSecond();
}
T const getFirst() const {
return first;
}
T const getSecond() const {
return second;
}
};
char buff[4096];
int pos = 4096;
char my_getch()
{
if (pos == 4096)
{
fread(buff, 1, 4096, stdin);
pos = 0;
}
return buff[pos++];
}
int nextNumber()
{
char c = my_getch(); int sign = 0;
while (c<'0' || c>'9')
{
if (c == '-')
sign = 1;
c = my_getch();
}
int nr = 0;
while (c >= '0' && c <= '9')
{
nr = nr * 10 + c - '0';
c = my_getch();
}
if (sign)
nr *= -1;
return nr;
}
class Solution {
int n;
vector<int> v;
int index[4];
Pair<int> indexSol;
public:
int SSM() {
int dp[4]; // vector cu n + 1 elemente (indexarea incepe de la 0)
// am nevoie de dp[1], ..., dp[n]
n = nextNumber();
// caz de baza
dp[0] = nextNumber();
index[0] = 1;
int sol = dp[0];
indexSol = Pair<int>(index[1], 1);
// caz general
for (int i = 1; i < n; ++i) {
if (dp[(i - 1) % 3] >= 0) {
// extinde la dreapta cu v[i]
dp[i % 3] = dp[(i - 1) % 3] + nextNumber();
index[i % 3] = index[(i-1) % 3];
}
else {
// incep o noua secventa
dp[i % 3] = nextNumber();
index[i % 3] = i + 1;
}
if (dp[i % 3] > sol) {
sol = dp[i % 3];
indexSol = Pair<int>(index[i % 3], i + 1);
}
}
return sol; // aceasta este suma asociata cu SSM
}
void print() {
freopen("ssm.out", "w", stdout);
int ans = SSM();
printf("%d %d %d\n", ans, indexSol.getFirst(), indexSol.getSecond());
}
};
int main() {
freopen("ssm.in", "r", stdin);
Solution sol;
sol.print();
}