Submission #162192

#TimeUsernameProblemLanguageResultExecution timeMemory
162192kostia244Split the sequence (APIO14_sequence)C++14
100 / 100
1750 ms81856 KiB
#pragma comment(linker, "/stack:200000000") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("unroll-loops") #include<bits/stdc++.h> #include<bits/extc++.h> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define pb push_back using namespace std; using namespace __gnu_pbds; using ll = long long; using vi = vector<ll>; using vvi = vector<vector<ll>>; const ll mod = 998244353; using oset = tree<pair<int, int>, null_type, less<pair<int, int>>, rb_tree_tag, tree_order_statistics_node_update>; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MK = 220, MN = 1e5 + 3; ll n, k, a[MN], pref[MN], dp[2][MN], aaa = -1; int p[MK][MN]; ll f(int l, int r, int k) { ll a = pref[k] - pref[l - 1]; ll b = pref[r] - pref[k]; return a * b; } void solve(int l, int r, int optl, int optr, int v) { if (l > r) return; int t = v & 1; int mid = (l + r) / 2; pair<ll, ll> opt = { -1e18, -1 }; for (int i = optl; i <= min(mid-1, optr); i++) { opt = max(opt, { dp[t ^ 1][i] + f(i + 1, n, mid), i }); } dp[t][mid] = opt.first; p[v][mid] = opt.second; solve(l, mid - 1, optl, opt.second, v); solve(mid + 1, r, opt.second, optr, v); } void bt(int k, int n) { if(!k) return; cout << n << " "; bt(k-1, p[k][n]); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for (int i = 1; i <= n; i++) { cin >> a[i], pref[i] = pref[i - 1] + a[i]; } for (int a = 1; a <= k; a++) { solve(1, n, 0, n, a); } int g = k; for (int i = 1; i < n; i++) if(dp[k & 1][i] >= dp[k & 1][g]) g=i; cout << dp[k&1][g] << "\n"; bt(k, g); }

Compilation message (stderr)

sequence.cpp:1:0: warning: ignoring #pragma comment  [-Wunknown-pragmas]
 #pragma comment(linker, "/stack:200000000")
#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...