#include "maklib.h" #include "message.h" #include <cstdio> #include <algorithm> using namespace std; typedef long long LL; int main() { int nr = MyNodeId(), ile = min(Size(), NumberOfNodes()); if(nr > ile-1) return 0; int pocz = 1 + nr * (Size() / ile); int kon = pocz + (Size() / ile); if(nr == ile-1) kon = Size()+1; LL wynik, pref, min0, max_pref, min_pref, pom; wynik = pref = min_pref = pom = 0; max_pref = ElementAt(pocz); for(int i=pocz; i < kon; i++) { int a = ElementAt(i); pref += a; max_pref = max(max_pref, pref); min_pref = min(min_pref, pref); if(pom > 0) pom += a; else pom = a; wynik = max(wynik, pom); } if(nr > 0) { Receive(nr-1); wynik = max(wynik, GetLL(nr-1)); LL dodaj = GetLL(nr-1); pref += dodaj; max_pref += dodaj; min_pref += dodaj; min0 = GetLL(nr-1); min_pref = min(min_pref, min0); } wynik = max(wynik, max_pref - min0); if(nr < ile-1) { PutLL(nr+1, wynik); PutLL(nr+1, pref); PutLL(nr+1, min_pref); Send(nr+1); } else printf("%lld\n", wynik); return 0; }
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 | #include "maklib.h" #include "message.h" #include <cstdio> #include <algorithm> using namespace std; typedef long long LL; int main() { int nr = MyNodeId(), ile = min(Size(), NumberOfNodes()); if(nr > ile-1) return 0; int pocz = 1 + nr * (Size() / ile); int kon = pocz + (Size() / ile); if(nr == ile-1) kon = Size()+1; LL wynik, pref, min0, max_pref, min_pref, pom; wynik = pref = min_pref = pom = 0; max_pref = ElementAt(pocz); for(int i=pocz; i < kon; i++) { int a = ElementAt(i); pref += a; max_pref = max(max_pref, pref); min_pref = min(min_pref, pref); if(pom > 0) pom += a; else pom = a; wynik = max(wynik, pom); } if(nr > 0) { Receive(nr-1); wynik = max(wynik, GetLL(nr-1)); LL dodaj = GetLL(nr-1); pref += dodaj; max_pref += dodaj; min_pref += dodaj; min0 = GetLL(nr-1); min_pref = min(min_pref, min0); } wynik = max(wynik, max_pref - min0); if(nr < ile-1) { PutLL(nr+1, wynik); PutLL(nr+1, pref); PutLL(nr+1, min_pref); Send(nr+1); } else printf("%lld\n", wynik); return 0; } |