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
#include <iostream>
#include "maklib.h"
#include "message.h"
using namespace std;

int main() {

//ios_base::sync_with_stdio(0);

  long long N, w=0, pocz=0, kon=0, sum=0, wyn=0, mod, mdo, a;
  long long imax, ipocz, ikon, iwyn, isum;
  int i;
  N=Size();
  mod=(MyNodeId() * N) / NumberOfNodes();
  mdo=((MyNodeId()+1) * N) / NumberOfNodes();
  
  for (i=mod; i<mdo; i++) {
		a=ElementAt(i);
		if (w<0) w=a;
		else w=w+a;
		if (wyn<w) wyn=w;
		sum=sum+a;
		if (sum>pocz) pocz=sum;
		if (sum<kon) kon=sum;
	}
	kon=sum-kon;

  if (MyNodeId() > 0) {
    PutLL(0, wyn);
    PutLL(0, pocz);
    PutLL(0, kon);
		PutLL(0, sum);
    Send(0);
  }
	else {
    w=kon;
    iwyn=wyn;
		for (int instancja = 1; instancja < NumberOfNodes(); ++instancja) {
      Receive(instancja);
      imax = GetLL(instancja);
      ipocz = GetLL(instancja);
      ikon = GetLL(instancja);
      isum = GetLL(instancja);
      if (iwyn<imax) {iwyn=imax;}
      if (iwyn<w+ipocz) {iwyn=w+ipocz;}
      if (w+isum<ikon) {w=ikon;}
      else {w=w+isum;}
    }
    cout << iwyn << endl;
  }
//	return 0;
}