Submission #1222679

#TimeUsernameProblemLanguageResultExecution timeMemory
1222679i_love_springHacker (BOI15_hac)C++20
0 / 100
177 ms2628 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ar array const int N = 500005; int a[N],n; ll ans = 0,dp[N],pref[N],suff[N]; void comp(int x) { memset(dp,0,n + 5); memset(pref,0,n + 5); memset(suff,0,n + 5); for (int i = 1; i <= n;i++) pref[i] = pref[i - 1] + a[i]; for (int i = n; i > 0;i--) suff[i] = suff[i + 1] + a[i]; for (int i = x + 1; i <= n;i++) { int r = (i - x) / 2,l = (x + (n - i)) / 2; // cerr << x << " " << i << " " << l << " " << r << "\n"; dp[i] = a[x]; if (l % 2 && r % 2) { if (l >= x) dp[i] += pref[x - 1] + suff[n - (l - x)]; else dp[i] += (pref[x - 1] - pref[x - l - 1]); if (r > n - x) dp[i] += pref[n] - pref[x] + pref[(r - (n - x))]; else dp[i] += pref[x + r] - pref[x]; int p1 = (x - l + n) % n, p2 = (x + r) % n; if (p1 == 0) p1 = n; if (p2 == 0) p2 = n; dp[i] -= min(a[p1],a[p2]); }else { int p = 0, p1 = n; if (l >= x) dp[i] += pref[x - 1] + suff[n - (l - x)]; else dp[i] += (pref[x - 1] - pref[x - l - 1]); if (r > n - x) dp[i] += pref[n] - pref[x] + pref[(r - (n - x))]; else dp[i] += pref[x + r] - pref[x]; } } for (int i = x - 1; i >= 1;i--) { int l = (x - i) / 2,r = ((n - x) + i) / 2; //cerr << x << " " << i << " " << l << " " << r << "\n"; dp[i] = a[x]; if (l % 2 && r % 2) { if (l >= x) dp[i] += pref[x - 1] + suff[n - (l - x)]; else dp[i] += (pref[x - 1] - pref[x - l - 1]); if (r > n - x) dp[i] += pref[n] - pref[x] + pref[(r - (n - x))]; else dp[i] += pref[x + r] - pref[x]; int p1 = (x - l + n) % n, p2 = (x + r) % n; if (p1 == 0) p1 = n; if (p2 == 0) p2 = n; dp[i] -= min(a[p1],a[p2]); }else { int p = 0, p1 = n; if (l >= x) dp[i] += pref[x - 1] + suff[n - (l - x)]; else dp[i] += (pref[x - 1] - pref[x - l - 1]); if (r > n - x) dp[i] += pref[n] - pref[x] + pref[(r - (n - x))]; else dp[i] += pref[x + r] - pref[x]; } } } void task1() { for (int i = 1; i <= n;i++) { comp(i); ll cur = 1e18; // for (int j = 1; j <= n;j++) cerr << dp[j] << " "; // cerr << " ---- \n"; for (int j = 1; j <= n;j++) if (i!=j) cur = min(cur,dp[j]); ans = max(ans,cur); } cout << ans; } void task2() { comp(1); // for (int i = 1; i <= n;i++) cerr << dp[i] << " "; // cerr << "\n"; for (int i = 1; i <= n;i++) ans = min(ans,dp[i]); cout << ans; } void solve() { cin >> n; for (int i = 1; i <= n;i++) cin >> a[i]; //task2(); if (n <= 5000) { task1(); }else { task2(); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; //cin >> t; while (t--) { solve(); cout << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...