#include "message.h"
#include "kanapka.h"
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
const int nodes = NumberOfNodes();
const int myid = MyNodeId();
int n,l,r;
template <typename T> T split(T n, T i, T tot) {
return n / tot * i + min(i, n % tot);
}
int main() {
n=GetN();
l=split(n,myid,nodes);
r=split(n,myid+1,nodes);
ll ans=0,s=0,ls=0,rs=0,cur=0;
for (int i=l;i<r;i++) {
int x=-GetTaste(i);
s=s+x;
ls=max(ls,s);
cur=max(cur+x,0ll);
ans=max(ans,cur);
// printf("%lld %d\n",s,x);
}
s=0;
for (int i=r-1;i>=l;i--) {
int x=-GetTaste(i);
s+=x;
rs=max(rs,s);
}
PutLL(0,s);
PutLL(0,ans);
PutLL(0,ls);
PutLL(0,rs);
Send(0);
s=0;
rs=0;
ans=0;
if (myid==0) {
for (int i=0;i<nodes;i++) {
Receive(i);
ll cs=GetLL(i);
ll cans=GetLL(i);
ll cls=GetLL(i);
ll crs=GetLL(i);
// printf("ff %d %lld %lld %lld %lld\n",i,cs,cans,cls,crs);
ans=max(ans,cans);
ans=max(ans,rs+cls);
rs=max(rs+cs,crs);
s+=cs;
}
printf("%lld\n",-s+ans);
}
}
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 67 68 69 | #include "message.h" #include "kanapka.h" #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector<int> VI; typedef long long ll; typedef pair<int,int> PII; const ll mod=1000000007; ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} const int nodes = NumberOfNodes(); const int myid = MyNodeId(); int n,l,r; template <typename T> T split(T n, T i, T tot) { return n / tot * i + min(i, n % tot); } int main() { n=GetN(); l=split(n,myid,nodes); r=split(n,myid+1,nodes); ll ans=0,s=0,ls=0,rs=0,cur=0; for (int i=l;i<r;i++) { int x=-GetTaste(i); s=s+x; ls=max(ls,s); cur=max(cur+x,0ll); ans=max(ans,cur); // printf("%lld %d\n",s,x); } s=0; for (int i=r-1;i>=l;i--) { int x=-GetTaste(i); s+=x; rs=max(rs,s); } PutLL(0,s); PutLL(0,ans); PutLL(0,ls); PutLL(0,rs); Send(0); s=0; rs=0; ans=0; if (myid==0) { for (int i=0;i<nodes;i++) { Receive(i); ll cs=GetLL(i); ll cans=GetLL(i); ll cls=GetLL(i); ll crs=GetLL(i); // printf("ff %d %lld %lld %lld %lld\n",i,cs,cans,cls,crs); ans=max(ans,cans); ans=max(ans,rs+cls); rs=max(rs+cs,crs); s+=cs; } printf("%lld\n",-s+ans); } } |
English