Cod sursa(job #2274166)

Utilizator MrRobotMrRobot MrRobot Data 1 noiembrie 2018 14:56:48
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <limits.h>
using namespace std;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

vector <int> v;

int maxim = INT_MIN;
int st=0, dr=0;

void secv_sum_maxima(int left, int right)
{
    if(left == right)
    {
        if(maxim < v[left])
        {
            st = dr = left;
            maxim = v[left];
        }
        return;
    }

    int mid = (left+right)/2;
    secv_sum_maxima(left, mid);
    secv_sum_maxima(mid+1, right);
    int ans1=0, ans2=0, sum=0, stanga=0, dreapta=0;
    int i;
    for(i = mid; i>= left; i--)
    {
        sum += v[i];
		if (sum > ans1)
		{
			ans1 = sum;
			stanga = i;
		}
    }
    sum=0;
    for(i=mid+1; i<=right; i++)
    {
        sum += v[i];
        if(sum > ans2)
        {
            ans2 = sum;
            dreapta = i;
        }
    }
    if(maxim < ans1+ans2)
    {
        maxim = ans1+ans2;
        st = stanga;
        dr = dreapta;
    }
    else if(maxim == ans1+ans2)
    {
        if(st > stanga)
        {
            maxim = ans1+ans2;
            st = stanga;
            dr = dreapta;
        }
        else if(st == stanga)
        {
            if(dr > dreapta)
            {
                maxim = ans1+ans2;
                st = stanga;
                dr = dreapta;
            }
        }
    }
}

int main()
{
    int n;
    fin>>n;
    int i;
    for(i=1; i<=n; i++)
    {
        int x;
        fin>>x;
        v.push_back(x);
    }
    secv_sum_maxima(0, n-1);
    fout<<maxim<<" "<<st+1<<" "<<dr+1;
}