Submission details
Task:Maximum sum
Sender:Isak
Submission time:2025-09-15 17:38:27 +0300
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.03 sdetails
#7ACCEPTED0.03 sdetails
#8ACCEPTED0.04 sdetails
#9ACCEPTED0.04 sdetails
#10ACCEPTED0.04 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails

Code

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

typedef struct{
    int64_t inside;
    int64_t left;
    int64_t right;
    int64_t total;
} quad;

int64_t max2(int64_t a, int64_t b){
    return a > b ? a : b;
}

quad find_maxi(int64_t *tab, int64_t min, int64_t max){
    if (min == max){
        return {tab[min], tab[min], tab[min], tab[min]};
    }

    quad left = find_maxi(tab, min, (min+max)/2);
    quad right = find_maxi(tab, (min+max)/2 + 1, max);

    quad res;
    res.total = left.total + right.total;
    res.left = max2(left.left, left.total + right.left);
    res.right = max2(right.right, right.total + left.right);
    res.inside = max2(max2(left.inside, right.inside), left.right + right.left);

    return res;


}


int main() {
    int64_t n = 0;
    if (scanf("%ld", &n) == 0)
        return EXIT_FAILURE;

    // main algo

    int64_t *tab = (int64_t*) malloc(n * sizeof(int64_t));

    for (int64_t i = 0; i < n; i++){
        if (scanf("%ld",tab + i) == 0)
            return EXIT_FAILURE;
    }

    quad res = find_maxi(tab, 0, n-1);


    printf("%ld\n", res.inside);

    return EXIT_SUCCESS;
}

Test details

Test 1

Verdict: ACCEPTED

input
10
1 1 1 1 1 1 1 1 1 1

correct output
10

user output
10

Test 2

Verdict: ACCEPTED

input
10
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

correct output
-1

user output
-1

Test 3

Verdict: ACCEPTED

input
10
24 7 -27 17 -67 65 -23 58 85 -...

correct output
185

user output
185

Test 4

Verdict: ACCEPTED

input
10
99 -59 31 83 -79 64 -20 -87 40...

correct output
154

user output
154

Test 5

Verdict: ACCEPTED

input
10
-19 61 60 33 67 19 -8 92 59 -3...

correct output
383

user output
383

Test 6

Verdict: ACCEPTED

input
200000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
200000

user output
200000

Test 7

Verdict: ACCEPTED

input
200000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...

correct output
-1

user output
-1

Test 8

Verdict: ACCEPTED

input
200000
381082742 830199996 -85684827 ...

correct output
231210956017

user output
231210956017

Test 9

Verdict: ACCEPTED

input
200000
-935928962 -795492223 75287481...

correct output
184607318819

user output
184607318819

Test 10

Verdict: ACCEPTED

input
200000
524408131 613017181 -62281009 ...

correct output
360019999220

user output
360019999220

Test 11

Verdict: ACCEPTED

input
1
1

correct output
1

user output
1

Test 12

Verdict: ACCEPTED

input
1
-2

correct output
-2

user output
-2

Test 13

Verdict: ACCEPTED

input
5
-1 -1 -1 -1 -2

correct output
-1

user output
-1

Test 14

Verdict: ACCEPTED

input
2
-3 -2

correct output
-2

user output
-2

Test 15

Verdict: ACCEPTED

input
1
-1000000000

correct output
-1000000000

user output
-1000000000