#include "maklib.h" #include "message.h" #include <iostream> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); long long wyn, w; long long wyn_p, sum_p; long long wyn_k; int n, a; int nodes = NumberOfNodes(); int node = MyNodeId(); int p = (node * n) / nodes; int k = ((node + 1) * n) / nodes; wyn = 0; /* suma pustego podciagu */ wyn_p = 0; wyn_k = 0; n = Size(); w = 0; sum_p = 0; for (int i = p; i < k; i++) { a = ElementAt(i + 1); sum_p += a; if (w > 0) w += a; /* oplaca sie wziac poprzednie w */ else w = a; /* nie oplaca sie brac poprzedniego w */ if (w > wyn) wyn = w; if (sum_p > wyn_p) wyn_p = sum_p; } if (w > 0) wyn_k = w; //cout << wyn_p << ' ' << wyn << ' ' << wyn_k << endl; //message if (node < nodes - 1) { int inst = Receive(node + 1); long long np = GetLL(node + 1); long long nw = GetLL(node + 1); wyn_p = max(wyn_p, np + sum_p); wyn = max(wyn, max(np + wyn_k, nw)); } if (node > 0) { PutLL(node - 1, wyn_p); PutLL(node - 1, wyn); Send(node - 1); } if (node == 0) { cout << max(wyn, wyn_p) << '\n'; //? } }
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 | #include "maklib.h" #include "message.h" #include <iostream> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); long long wyn, w; long long wyn_p, sum_p; long long wyn_k; int n, a; int nodes = NumberOfNodes(); int node = MyNodeId(); int p = (node * n) / nodes; int k = ((node + 1) * n) / nodes; wyn = 0; /* suma pustego podciagu */ wyn_p = 0; wyn_k = 0; n = Size(); w = 0; sum_p = 0; for (int i = p; i < k; i++) { a = ElementAt(i + 1); sum_p += a; if (w > 0) w += a; /* oplaca sie wziac poprzednie w */ else w = a; /* nie oplaca sie brac poprzedniego w */ if (w > wyn) wyn = w; if (sum_p > wyn_p) wyn_p = sum_p; } if (w > 0) wyn_k = w; //cout << wyn_p << ' ' << wyn << ' ' << wyn_k << endl; //message if (node < nodes - 1) { int inst = Receive(node + 1); long long np = GetLL(node + 1); long long nw = GetLL(node + 1); wyn_p = max(wyn_p, np + sum_p); wyn = max(wyn, max(np + wyn_k, nw)); } if (node > 0) { PutLL(node - 1, wyn_p); PutLL(node - 1, wyn); Send(node - 1); } if (node == 0) { cout << max(wyn, wyn_p) << '\n'; //? } } |