Submission #1085045

#TimeUsernameProblemLanguageResultExecution timeMemory
1085045minggaSplit the sequence (APIO14_sequence)C++17
100 / 100
1137 ms85332 KiB
#include "bits/stdc++.h" using namespace std; #define ln "\n" #define dbg(x) cout << #x << " = " << x << ln #define mp make_pair #define pb push_back #define fi first #define se second #define inf 2e18 #define fast_cin() \ ios_base::sync_with_stdio(false); \ cin.tie(NULL) #define out(file) freopen(file, "w", stdout) #define in(file) freopen(file, "r", stdin) #define all(x) (x).begin(), (x).end() #define sz(x) ((int)(x).size()) #define ll long long int MOD = 1e9 + 7; const int N = 1e5 + 7; int n, k, a[N], ps[N]; vector<ll> pre, cur; vector<vector<int>> trace; void calc(int l, int r, int optl, int optr, int k) { if(l > r) return; pair<ll, int> best = {-inf, -1}; int mid = (l + r) >> 1; for(int i = optl; i <= min(mid-1, optr); i++) { best = max(best, {pre[i] + 1LL * ps[i] * (ps[mid]-ps[i]), i}); } trace[mid][k] = best.se; cur[mid] = best.fi; calc(l, mid-1, optl, best.se, k); calc(mid+1, r, best.se, optr, k); } signed main() { fast_cin(); cin >> n >> k; for(int i = 1; i <= n; i++) cin >> a[i], ps[i] = ps[i-1] + a[i]; pre.resize(n+1, 0); cur.resize(n+1, 0); trace.resize(n+1, vector<int>(k+1, 0)); for(int i = 1; i <= k; i++) { calc(i+1, n, i-1, n, i); pre = cur; } cout << cur[n] << ln; vector<int> ans; int cur = n; for(int i = k; i > 0; i--) { assert(cur > 0); ans.pb(trace[cur][i]); cur = trace[cur][i]; } reverse(all(ans)); for(int x : ans) cout << x << ' '; cerr << "\nTime: " << clock() * 1000 / CLOCKS_PER_SEC; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...