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

Envío 6184

Problema 0x94 - Subarreglo de máxima suma

Caso # Resultado Tiempo Memoria
#1
Correcto
0.003 s 0 KBi
#2
Correcto
0.001 s 0 KBi
#3
Correcto
0.009 s 2 KBi
#4
Correcto
0.002 s 0 KBi
#5
Correcto
0.006 s 1 KBi
#6
Correcto
0.002 s 0 KBi
#7
Correcto
0.002 s 0 KBi
#8
Correcto
0.002 s 0 KBi
#9
Correcto
0.001 s 0 KBi
#10
Correcto
0.002 s 0 KBi
#11
Correcto
0.007 s 1 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.001 s 0 KBi
#16
Correcto
0.002 s 0 KBi
#17
Correcto
0.012 s 1 KBi
#18
Correcto
0.013 s 1 KBi
#19
Correcto
0.013 s 1 KBi
#20
Correcto
0.011 s 1 KBi
#21
Correcto
0.012 s 1 KBi
#22
Correcto
0.022 s 1 KBi
#23
Correcto
0.01 s 1 KBi
#24
Correcto
0.01 s 1 KBi
Puntos totales: 100 / 100

Código

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

ll findBest(ll *a, int l, int r){
    if(l >= r) return a[l];
    int m = l+(r-l)/2;
    ll best = max(findBest(a, l, m), findBest(a, m+1, r));
    ll bsl, sl, bsr, sr;

    bsl = sl = a[m];
    for(int i=m-1; i>=l; i--){
        sl += a[i];
        bsl = max(bsl, sl);
    }
    bsr = sr = a[m+1];
    for(int i=m+2; i<=r; i++){
        sr += a[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;
    ll a[n];
    for(int i=0;i<n;i++) cin >> a[i];
    cout << findBest(a, 0, n-1) << endl;
	return 0;
}