Pagini recente » Cod sursa (job #1858979) | Cod sursa (job #1620549) | Cod sursa (job #2904274) | Cod sursa (job #66780) | Cod sursa (job #2849869)
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
long long int n, x, v[6000001], i_sol, j_sol;
pair <long long int, long long int > dp[6000001];
///dp[i].first secv de suma maxima care se termina in i
/// dp[i].second unde incepe exact subsecventa cu suma max
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>v[i];
}
///optimizam la o(n) cu dinamica
///dp[i]=subsecventa de suma maxima care se termina la pozitia i
int maxim=-INF;
for(int i=1; i<=n; i++)
{
if(dp[i-1].first<0)
{
dp[i].first=v[i];
dp[i].second=i;
}
else
{
dp[i].first=dp[i-1].first+v[i];
dp[i].second=dp[i-1].second;
}
if(dp[i].first>maxim)
{
i_sol=i;
maxim=dp[i].first;
}
}
maxim=-INF;
for(int i=1; i<=n; i++)
{
if(dp[i].first>maxim)
{
maxim=dp[i].first;
i_sol=dp[i].second;
j_sol=i;
}
}
fout<<maxim<<" "<<i_sol<<" "<<j_sol;
return 0;
}