Pagini recente » Cod sursa (job #3328461) | Borderou de evaluare (job #313700) | Cod sursa (job #313562) | Cod sursa (job #630183) | Cod sursa (job #3351101)
// https://infoarena.ro/problema/ssm
#include<fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int main() {
int n, v;
fin >> n;
int sumMax = 0; // suma maxima
int sum = 0; // suma sevcentei candidat
int posInceputSumMax; // pozitia de la care incepe subsecventa de suma maxima
int posSfarsitSumMax; // pozitia la care se termina subsecventa de suma maxima
int posInceputSum = 1;
for(int i = 1; i <= n; i++) {
fin >> v;
sum += v;
if(sum > sumMax) {
sumMax = sum;
posInceputSumMax = posInceputSum;
posSfarsitSumMax = i;
}
if(sum <= 0) {
// consider ca subsecventa cu suma maxima 0 nu mai e candidat
// suma(PQ) = suma(P) + suma(Q)
// daca suma(P) = 0 => suma(PQ) = suma(Q)
// atunci ignor subsecventa (P), pentru ca am nevoie de subsecventa minima
sum = v;
posInceputSum = i; // incepe o noua subsecventa candidat pentru subsecventa de suma maxima
}
}
fout << sumMax << " " << posInceputSumMax << " " << posSfarsitSumMax << endl;
fin.close();
fout.close();
return 0;
}