Cod sursa(job #2717553)

Utilizator Maria23Dutu Maria Maria23 Data 7 martie 2021 16:40:47
Problema Subsecventa de suma maxima Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
// 80 puncte
// probabil gresesc asta:
// Dacă există mai mult subsecvenţe candidate la soluţie,
// atunci se va tipări cea cu indicele de început cel mai mic, iar în caz de egalitate cea mai scurtă.
 
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main() {
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
 
    long long n;
    fin>>n;
    long long x, sumaMax = -(1LL << 35), sumaCurenta = 0;
	pair <int, int> celMaiBunIndiceDeInceputSiLungime;
	int indiceDeInceput;
    for(long long i = 1; i <= n; i++){
        fin>>x;
        if(sumaCurenta + x > x){
            sumaCurenta += x;
        }
        else{
            sumaMax = x;
            sumaCurenta = x;
  			indiceDeInceput = i; 
        }
        if(sumaCurenta > sumaMax){
            sumaMax = sumaCurenta;
            celMaiBunIndiceDeInceputSiLungime = {indiceDeInceput, i - indiceDeInceput + 1};
        }
		else if (sumaCurenta == sumaMax) {
			celMaiBunIndiceDeInceputSiLungime = min(celMaiBunIndiceDeInceputSiLungime, {indiceDeInceput, i - indiceDeInceput + 1});
		}
    }
   fout<<sumaMax<< " "<<celMaiBunIndiceDeInceputSiLungime.first<< " "<<celMaiBunIndiceDeInceputSiLungime.first + celMaiBunIndiceDeInceputSiLungime.second - 1;
    return 0;
}