Submission #1192568

#TimeUsernameProblemLanguageResultExecution timeMemory
1192568heheHacker (BOI15_hac)C++20
100 / 100
239 ms31728 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int MAXN = 5e5+2; int n; int l[2 * MAXN], r[2 * MAXN], val[2 * MAXN]; int sums[MAXN]; int curent = 0; void build(int now = 1){ if (now < n) { build(now * 2); build(now * 2 + 1); l[now] = l[now * 2]; r[now] = r[now * 2 + 1]; val[now] = min(val[now * 2], val[now * 2 + 1]); } else { l[now] = curent; r[now] = curent; val[now] = sums[curent++]; } } int query(int left, int right, int now = 1){ if (right < l[now] || r[now] < left) { return INT32_MAX; // <-- small fix: use INT32_MAX instead of INT_MAX } if (left <= l[now] && r[now] <= right) { return val[now]; } return min(query(left, right, now * 2), query(left, right, now * 2 + 1)); } signed main(){ cin >> n; vector<int> numere(n); int sum = 0, half = (n + 1) / 2; for (int i = 0; i < n; i++) { cin >> numere[i]; if (i < half) { sum += numere[i]; } } for (int i = 0; i <= n; i++) { sums[i % n] = sum; sum += numere[(i + half) % n]; sum -= numere[i % n]; } build(); int ans = 0; for (int i = 0; i < n; i++) { int left = (i - half + 1 + n) % n; int right = i; if (right < left) { ans = max(ans, min(query(0, right), query(left, n - 1))); } else { ans = max(ans, query(left, right)); } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...