█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 6166

Problema 0x94 - Subarreglo de máxima suma

Caso # Resultado Tiempo Memoria
#1
Correcto
0.001 s 0 KBi
#2
Correcto
0.002 s 0 KBi
#3
Correcto
0.002 s 0 KBi
#4
Correcto
0.006 s 30 KBi
#5
Correcto
0.007 s 2 KBi
#6
Correcto
0.003 s 0 KBi
#7
Correcto
0.002 s 0 KBi
#8
Correcto
0.001 s 0 KBi
#9
Correcto
0.004 s 2 KBi
#10
Correcto
0.005 s 24 KBi
#11
Correcto
0.002 s 0 KBi
#12
Correcto
0.002 s 0 KBi
#13
Correcto
0.002 s 0 KBi
#14
Correcto
0.002 s 0 KBi
#15
Correcto
0.002 s 0 KBi
#16
Correcto
0.005 s 20 KBi
#17
Incorrecto
0.01 s 1 KBi
#18
Correcto
0.01 s 1 KBi
#19
Correcto
0.011 s 1 KBi
#20
Incorrecto
0.028 s 2 KBi
#21
Incorrecto
0.025 s 2 KBi
#22
Incorrecto
0.027 s 2 KBi
#23
Correcto
0.009 s 1 KBi
#24
Correcto
0.009 s 1 KBi
Puntos totales: 84 / 100

Código

#include <bits/stdc++.h>
using namespace std;

int maxSumSubArr(int *arr, int l, int r){
    if(l >= r) return arr[l];

    int m = l + (r-l) / 2;
    long long best = max(maxSumSubArr(arr, l, m), maxSumSubArr(arr, m+1, r));

    long long bsl=arr[m], sl=0, bsr=arr[m+1], sr=0;
    for(int i=m; i>=l; i--){
        sl += arr[i];
        bsl = max(bsl, sl);
    }
    for(int i=m+1; i<=r; i++){
        sr += arr[i];
        bsr = max(bsr, sr);
    }
    return max(best, bsl+bsr);
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); 
    // your code goes here
    int n;
    cin >> n;
    if(n < 1) return 0;
    int arr[n];
    for(int i=0;i<n;i++)
        cin >> arr[i];
    cout << maxSumSubArr(arr, 0, n-1) << endl;
	return 0;
}