#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
long long minSum(vector<int> a) {
// для удобства добавим в начало массива ноль
a.insert(a.begin(), 0);
// элементы массива индексируются [1..n]
int n = a.size() - 1;
// префиксные суммы
// cumsum[k] := a[1] + ... + a[k]
vector<ll> prefixSums;
for (int ai : a)
prefixSums.push_back(prefixSums.empty() ? 0 : prefixSums.back() + ai);
// сумма на отрезке a_j ... a_i равна сумме на префиксе [1..i] минус сумме на префиксе [1..j-1]
// по условию задачи рассматриваются только такие суммы, что a_j == a_i
// будем итерироваться по массиву и для каждого числа a_j запоминать минимальную сумму на префиксе [1..j-1]
// при встрече очередного числа a_i будем обновлять ответ, рассматривая отрезок [j..i]
unordered_map<int, ll> numberToMinSum;
ll answer = numeric_limits<ll>::min();
for (int i = 1; i <= n; ++i) {
if (numberToMinSum.find(a[i]) != numberToMinSum.end()) {
numberToMinSum[a[i]] = min(numberToMinSum[a[i]], prefixSums[i - 1]);
answer = max(answer, prefixSums[i] - numberToMinSum[a[i]]);
} else {
numberToMinSum[a[i]] = prefixSums[i - 1];
}
}
return answer;
}
void test(vector<int> a) {
cout << "вектор:";
for (int ai : a)
cout << " " << ai;
cout << ", сумма: " << minSum(a) << endl;
}
int main() {
test({3, 5, 6, 3, 5});
test({-1, -1, -1});
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKbG9uZyBsb25nIG1pblN1bSh2ZWN0b3I8aW50PiBhKSB7CgkvLyDQtNC70Y8g0YPQtNC+0LHRgdGC0LLQsCDQtNC+0LHQsNCy0LjQvCDQsiDQvdCw0YfQsNC70L4g0LzQsNGB0YHQuNCy0LAg0L3QvtC70YwKCWEuaW5zZXJ0KGEuYmVnaW4oKSwgMCk7CgkvLyDRjdC70LXQvNC10L3RgtGLINC80LDRgdGB0LjQstCwINC40L3QtNC10LrRgdC40YDRg9GO0YLRgdGPIFsxLi5uXQoJaW50IG4gPSBhLnNpemUoKSAtIDE7CgkKCS8vINC/0YDQtdGE0LjQutGB0L3Ri9C1INGB0YPQvNC80YsKCS8vIGN1bXN1bVtrXSA6PSBhWzFdICsgLi4uICsgYVtrXQoJdmVjdG9yPGxsPiBwcmVmaXhTdW1zOwoJZm9yIChpbnQgYWkgOiBhKQoJCXByZWZpeFN1bXMucHVzaF9iYWNrKHByZWZpeFN1bXMuZW1wdHkoKSA/IDAgOiBwcmVmaXhTdW1zLmJhY2soKSArIGFpKTsKCQoJLy8g0YHRg9C80LzQsCDQvdCwINC+0YLRgNC10LfQutC1IGFfaiAuLi4gYV9pINGA0LDQstC90LAg0YHRg9C80LzQtSDQvdCwINC/0YDQtdGE0LjQutGB0LUgWzEuLmldINC80LjQvdGD0YEg0YHRg9C80LzQtSDQvdCwINC/0YDQtdGE0LjQutGB0LUgWzEuLmotMV0KCS8vINC/0L4g0YPRgdC70L7QstC40Y4g0LfQsNC00LDRh9C4INGA0LDRgdGB0LzQsNGC0YDQuNCy0LDRjtGC0YHRjyDRgtC+0LvRjNC60L4g0YLQsNC60LjQtSDRgdGD0LzQvNGLLCDRh9GC0L4gYV9qID09IGFfaQoJLy8g0LHRg9C00LXQvCDQuNGC0LXRgNC40YDQvtCy0LDRgtGM0YHRjyDQv9C+INC80LDRgdGB0LjQstGDINC4INC00LvRjyDQutCw0LbQtNC+0LPQviDRh9C40YHQu9CwIGFfaiDQt9Cw0L/QvtC80LjQvdCw0YLRjCDQvNC40L3QuNC80LDQu9GM0L3Rg9GOINGB0YPQvNC80YMg0L3QsCDQv9GA0LXRhNC40LrRgdC1IFsxLi5qLTFdCgkvLyDQv9GA0Lgg0LLRgdGC0YDQtdGH0LUg0L7Rh9C10YDQtdC00L3QvtCz0L4g0YfQuNGB0LvQsCBhX2kg0LHRg9C00LXQvCDQvtCx0L3QvtCy0LvRj9GC0Ywg0L7RgtCy0LXRgiwg0YDQsNGB0YHQvNCw0YLRgNC40LLQsNGPINC+0YLRgNC10LfQvtC6IFtqLi5pXQoJdW5vcmRlcmVkX21hcDxpbnQsIGxsPiBudW1iZXJUb01pblN1bTsKCWxsIGFuc3dlciA9IG51bWVyaWNfbGltaXRzPGxsPjo6bWluKCk7Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKCQlpZiAobnVtYmVyVG9NaW5TdW0uZmluZChhW2ldKSAhPSBudW1iZXJUb01pblN1bS5lbmQoKSkgewoJCQludW1iZXJUb01pblN1bVthW2ldXSA9IG1pbihudW1iZXJUb01pblN1bVthW2ldXSwgcHJlZml4U3Vtc1tpIC0gMV0pOwoJCQlhbnN3ZXIgPSBtYXgoYW5zd2VyLCBwcmVmaXhTdW1zW2ldIC0gbnVtYmVyVG9NaW5TdW1bYVtpXV0pOwoJCX0gZWxzZSB7CgkJCW51bWJlclRvTWluU3VtW2FbaV1dID0gcHJlZml4U3Vtc1tpIC0gMV07CgkJfQoJfQoJcmV0dXJuIGFuc3dlcjsKfQoKdm9pZCB0ZXN0KHZlY3RvcjxpbnQ+IGEpIHsKCWNvdXQgPDwgItCy0LXQutGC0L7RgDoiOwoJZm9yIChpbnQgYWkgOiBhKQoJCWNvdXQgPDwgIiAiIDw8IGFpOwoJCgljb3V0IDw8ICIsINGB0YPQvNC80LA6ICIgPDwgbWluU3VtKGEpIDw8IGVuZGw7Cn0KCmludCBtYWluKCkgewoJdGVzdCh7MywgNSwgNiwgMywgNX0pOwoJdGVzdCh7LTEsIC0xLCAtMX0pOwoJcmV0dXJuIDA7Cn0=