# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1143631 | M0stafa | Hacker (BOI15_hac) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define int long long
using namespace std;
#define all(x) x.begin(), x.end()
template<typename T> istream &operator>>(istream &in, vector<T> &v) { for (auto &x: v) in >> x; return in; }
template<typename T>ostream &operator<<(ostream &out, const vector<T> &v) { for (const T &x: v) out << x << ' ';return out;}
#ifndef ONLINE_JUDGE
#define dout(...) cerr << "Line:" << __LINE__ << " [" << #__VA_ARGS__ << "] = ["; _print(__VA_ARGS__)
#else
#define dout(...)
#endif
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
vector<int> a(n + 1, 0);
for (int i = 1; i <= n; i++) {
cin >> a[i];
a.push_back(a[i]);
}
for (int i = 1; i <= 2 * n; i++)
a[i] += a[i - 1];
multiset<int> st;
vector<int> ans(n + 1, 1e18);
int Slide = (n + 1) / 2;
for (int i = 1; i <= 2 * n; i++) {
if (i + Slide - 1 <= 2 * n) {
int l = i;
int r = l + (Slide - 1);
st.insert(a[r] - a[l - 1]);
}
if (i > Slide) {
int r = i - 1;
int l = r - Slide;
st.erase(st.find(a[r] - a[l]));
}
int Prev_idx = (i - 1) % n + 1;
dout(st);
ans[Prev_idx] = min(ans[Prev_idx], *st.begin());
}
int res = 0;
for (int i = 1; i <= n; i++) {
res = max(res, ans[i]);
}
cout << res;
return 0;
}