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
#include"maklib.h"
#include"message.h"
#include<iostream>
using namespace std;
long long int rozmiar=Size();
long long int lewy, prawy, wynik, w, sum, i, j, s1, s2,z;
int l1,p1,l2,p2, k, n, l, p, l3; // 1 - Prawda  2-Falsz
int main()
{
k=MyNodeId();
n=NumberOfNodes();
z=rozmiar/n;
lewy=k*z;
prawy=lewy+z;
if(k==n-1)
    prawy=rozmiar+1;
w=0;
sum=w;
l3=1;
l=1;
p=2;
if(lewy==prawy)
    ((ElementAt(lewy)>0)? ElementAt(lewy):0);
for(i=lewy;i<prawy;i++)
{
    if(w>0)
        w=w+ElementAt(i+1);
    else
        w=ElementAt(i+1);
    if(w>sum && l3==2)
        l=2;
    if(w>sum)
        sum=w;
    if(w<0)
        l3=2;
    if(i==(prawy-1)&&w==sum)
        p=1;
}
if(k>0)
{
PutLL(0,sum);
PutLL(0, l);
PutLL(0, p);
Send(0);
}
if(k==0)
{
l1=0;
p1=0;
l2=l;
l1=p;
s1=sum;
wynik=sum;
for(j=1;j<k+1;j++)
{
    l1=l2;
    p1=p2;
    Receive(-1);
    s2=GetLL(j);
    l2=GetLL(j);
    p2=GetLL(j);
    if(p1==1 && l2==1)
        s1=s1+s2;
    else s1=s2;
    if(s1>wynik)
        wynik=s1;
}
cout<<wynik;
}
return 0;
}