# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1193402 | SnowRaven52 | Hacker (BOI15_hac) | C++20 | 0 ms | 0 KiB |
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n; cin >> n;
vector<int> a(2 * n + 1);
a[0] = 0;
multiset<int> vals;
int wsz = (n + 1) / 2;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
a[n + i] = a[i];
}
for (int i = 1; i <= 2 * n; ++i) {
a[i] += a[i - 1];
}
int answer = 0;
vector<int> minSums(n + 1, INT_MAX);
for (int i = 1; i <= 2 * n; ++i) {
if (i + wsz - 1 <= 2 * n) {
int sum = a[i + wsz - 1] - a[i - 1];
vals.insert(sum);
}
if (i > wsz) {
int oldSum = a[i - 1] - a[i - 1 - wsz];
vals.erase(vals.find(oldSum));
}
int position = ((i - 1) % n) + 1;
if (!vals.empty()) {
minSums[position] = min(minSums[position], *vals.begin());
}
}
for (int i = 1; i <= n; ++i) {
answer = max(answer, minSums[i]);
}
cout << answer << endl;
}