#include "maklib.h"
#include "message.h"
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
long long N = Size();
long long start = (MyNodeId() * N) / NumberOfNodes();
long long stop = ((MyNodeId() + 1) * N) / NumberOfNodes();
long long int pocz=0,kon=0,act=0,el,wyn=0,poczP,konP,wynP;
for(int i=start;i<stop;++i){
el=ElementAt(i);
if(act+el<0){
if(pocz==0){
pocz=act;
}
act=0;
}else{
act+=el;
}
wyn=max(wyn,act);
kon=act;
}
int lN=NumberOfNodes()-1;
if(MyNodeId()<lN){
PutLL(lN,pocz);
PutLL(lN,kon);
PutLL(lN,wyn);
Send(lN);
}else{
for(int inst=0;inst<lN;++inst){
Receive(inst);
poczP=GetLL(inst);
konP=GetLL(inst);
wynP=GetLL(inst);
wyn=max(wyn,wynP);
wyn=max(wyn,kon+poczP);
kon=konP;
}
printf("%d\n",wyn);
}
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 | #include "maklib.h" #include "message.h" #include <cstdio> #include <algorithm> using namespace std; int main() { long long N = Size(); long long start = (MyNodeId() * N) / NumberOfNodes(); long long stop = ((MyNodeId() + 1) * N) / NumberOfNodes(); long long int pocz=0,kon=0,act=0,el,wyn=0,poczP,konP,wynP; for(int i=start;i<stop;++i){ el=ElementAt(i); if(act+el<0){ if(pocz==0){ pocz=act; } act=0; }else{ act+=el; } wyn=max(wyn,act); kon=act; } int lN=NumberOfNodes()-1; if(MyNodeId()<lN){ PutLL(lN,pocz); PutLL(lN,kon); PutLL(lN,wyn); Send(lN); }else{ for(int inst=0;inst<lN;++inst){ Receive(inst); poczP=GetLL(inst); konP=GetLL(inst); wynP=GetLL(inst); wyn=max(wyn,wynP); wyn=max(wyn,kon+poczP); kon=konP; } printf("%d\n",wyn); } return 0; } |
English