1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include "kanapka.h"
#include "message.h"

using namespace std;

int main()
{
    long long int N = GetN();
    long long int number = MyNodeId();
    long long int nodes = NumberOfNodes();


    long long int mini = 0;
    long long int akt = 0;
    long long int maxlewa = 0;
    long long int minlewa = 0;
    long long int aktlewa = 0;

    for (long long int i=number*((N/nodes)+1); i<min(N,(number+1)*((N/nodes)+1)); i++){
        long long int x;
        x = GetTaste(i);

        aktlewa += x;
        if (aktlewa > maxlewa) maxlewa = aktlewa;
        if (aktlewa < minlewa) minlewa = aktlewa;

        if (akt + x < 0){
            akt += x;
        }
        else{
            akt = 0;
        }
        if (akt < mini) mini = akt;
    }

    if (number > 0){
        PutLL(0,aktlewa);
        PutLL(0,maxlewa);
        PutLL(0,aktlewa-minlewa);
        PutLL(0,aktlewa-mini);
        Send(0);
    }

    else{
        long long int T[nodes][4];
        T[0][0] = aktlewa;
        T[0][1] = maxlewa;
        T[0][2] = aktlewa-minlewa;
        T[0][3] = aktlewa - mini;

        for (int i=1; i<nodes; i++){
            Receive(i);
            for (int j=0; j<4; j++){
                T[i][j] = GetLL(i);
            }
        }

        long long int odp = 0;
        long long int sumlewa = 0;
        for (int i=0; i<nodes; i++){
            long long int sumprawa = 0;
            for (int j=nodes-1; j>=i; j--){
                if (i == j){
                    long long int ile = sumlewa + sumprawa + T[i][3];
                    if (ile > odp) odp = ile;
                }
                else{
                    long long int ile = sumlewa + sumprawa + T[i][1] + T[j][2];
                    if (ile > odp) odp = ile;
                }
                sumprawa += T[j][0];
            }
            sumlewa += T[i][0];
        }
        cout << odp;
    }

}