#include "message.h"
#include "maklib.h"
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
int main()
{
int id = MyNodeId(), num = NumberOfNodes();
LL n = Size();
int i0 = (id * n) / num;
int i1 = ((id+1) * n) / num;
LL sum = 0, mins = 0, maxs = 0, w = 0;
for (int i=i0; i<i1; i++)
{
sum += ElementAt(i+1);
if (sum < mins) mins = sum;
if (sum > maxs) maxs = sum;
w = max(w, sum - mins);
}
if (id > 0)
{
PutLL(0, sum);
PutLL(0, mins);
PutLL(0, maxs);
PutLL(0, w);
Send(0);
}
else
{
for (int i=1; i<num; i++)
{
Receive(i);
LL _sum = GetLL(i);
LL _mins = GetLL(i);
LL _maxs = GetLL(i);
LL _w = GetLL(i);
w = max(w, max(_w, sum + _maxs - mins));
maxs = max(maxs, sum + _maxs);
mins = min(mins, sum + _mins);
sum += _sum;
}
printf("%lld\n", w);
}
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 | #include "message.h" #include "maklib.h" #include <cstdio> #include <algorithm> using namespace std; typedef long long LL; int main() { int id = MyNodeId(), num = NumberOfNodes(); LL n = Size(); int i0 = (id * n) / num; int i1 = ((id+1) * n) / num; LL sum = 0, mins = 0, maxs = 0, w = 0; for (int i=i0; i<i1; i++) { sum += ElementAt(i+1); if (sum < mins) mins = sum; if (sum > maxs) maxs = sum; w = max(w, sum - mins); } if (id > 0) { PutLL(0, sum); PutLL(0, mins); PutLL(0, maxs); PutLL(0, w); Send(0); } else { for (int i=1; i<num; i++) { Receive(i); LL _sum = GetLL(i); LL _mins = GetLL(i); LL _maxs = GetLL(i); LL _w = GetLL(i); w = max(w, max(_w, sum + _maxs - mins)); maxs = max(maxs, sum + _maxs); mins = min(mins, sum + _mins); sum += _sum; } printf("%lld\n", w); } return 0; } |
English