#include "message.h"
#include "kanapka.h"
#include <algorithm>
#include <iostream>
using namespace std;
const int lInstancji = NumberOfNodes();
const int idInstancji = MyNodeId();
const long long dKanapki = GetN();
int main() {
long long poczatek = (long long)(idInstancji * dKanapki / lInstancji);
long long koniec = (long long)((idInstancji+1) * dKanapki / lInstancji);
long long suma = 0, najmniejszyWSrodku = 0;
long long najmniejszyKoniec = 0, najmniejszyPoczatek = 0;
for (long long i = poczatek; i < koniec; ++i) {
long long smak = GetTaste(i);
suma += smak;
najmniejszyKoniec += smak;
if (najmniejszyKoniec > 0)
najmniejszyKoniec = 0;
najmniejszyWSrodku = min(najmniejszyWSrodku, najmniejszyKoniec);
}
for (long long i = koniec-1; i>= poczatek; --i) {
long long smak = GetTaste(i);
najmniejszyPoczatek += smak;
if (najmniejszyPoczatek > 0)
najmniejszyPoczatek = 0;
}
PutLL(0, suma);
PutLL(0, najmniejszyWSrodku);
PutLL(0, najmniejszyKoniec);
PutLL(0, najmniejszyPoczatek);
Send(0);
if (idInstancji == 0){
long long wSumie = 0, czescKanapki = 0, czescKanapkiPom = 0;
for (int i = 0; i<lInstancji; i++){
Receive(i);
suma = GetLL(i);
najmniejszyWSrodku = GetLL(i);
najmniejszyKoniec = GetLL(i);
najmniejszyPoczatek = GetLL(i);
czescKanapki = min(czescKanapki, czescKanapkiPom + najmniejszyPoczatek);
czescKanapkiPom += suma;
czescKanapkiPom = min(czescKanapkiPom, najmniejszyKoniec);
czescKanapki = min(czescKanapki, najmniejszyWSrodku);
wSumie += suma;
}
cout << (wSumie - czescKanapki) << endl;
}
return 0;
}