Submission #696093

#TimeUsernameProblemLanguageResultExecution timeMemory
696093KahouHacker (BOI15_hac)C++14
100 / 100
73 ms41788 KiB
/* In the name of God, aka Allah */ // let this be mytemp.cpp #include<bits/stdc++.h> using namespace std; #define F first #define S second #define endl '\n' #define mk make_pair typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int N = 5e5 + 50, LG = 20; int n, a[N], sum, s[N], sp[LG][N]; int get(int l, int r) { int k = 31-__builtin_clz(r-l+1); return max(sp[k][l], sp[k][r-(1<<k)+1]); } void solve() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; sum += a[i]; } for (int i = 1; i <= 2*n; i++) { s[(i-1)%n+1] = s[(i-2)%n+1] + a[(i-1)%n+1]; if (i > n/2) s[(i-1)%n+1] -= a[(i-n/2-1)%n+1]; } for (int i = 1; i <= n; i++) { sp[0][i] = s[i]; } for (int k = 1; k < LG; k++) { for (int i = 1; i <= (n-(1<<k)+1); i++) { sp[k][i] = max(sp[k-1][i], sp[k-1][i+(1<<(k-1))]); } } int ans = 0; for (int i = 1; i <= n; i++) { if (i + n/2 > n) { ans = max(ans, sum-get((i+(n/2)-1)%n+1, i-1)); } else { ans = max(ans, sum-max((i > 1? get(1, i-1):0), get(i+(n/2), n))); } } cout << ans << endl; } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); solve(); 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...