Submission #444740

#TimeUsernameProblemLanguageResultExecution timeMemory
444740hibye1217Split the sequence (APIO14_sequence)C++17
33 / 100
72 ms131076 KiB
#include <bits/stdc++.h> #define endl '\n' #define fr first #define sc second #define all(v) v.begin(),v.end() #define unq(v) sort( all(v) ); v.erase( unique( all(v) ), v.end() ) #define bout(x) cout << bitset<sizeof(x)*8>(x) << endl #define mkp(a,b) make_pair(a,b) #define gcd(a,b) __gcd(a,b) using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pi2 = pair<int, int>; using pl2 = pair<ll, ll>; using cpl = complex<ld>; const ld pi = 3.14159265358979323846264338327950288; const ld tau = 2 * pi; const int dx[4] = {0, 1, 0, -1}, dy[4] = {-1, 0, 1, 0}; const int ddx[8] = {0, 1, 1, 1, 0, -1, -1, -1}, ddy[8] = {-1, -1, 0, 1, 1, 1, 0, -1}; const int nx[8] = {1, 2, 2, 1, -1, -2, -2, -1}, ny[8] = {-2, -1, 1, 2, 2, 1, -1, -2}; // #define DEBUG ll arr[100020]; ll sum[100020]; pl2 dp[100020][220]; int ptr[220]; inline ll qry(int st, int ed){ return sum[ed] - sum[st-1]; } void Main(){ int n, k; cin >> n >> k; for (int i = 1; i <= n; i++){ cin >> arr[i]; sum[i] = sum[i-1] + arr[i]; } for (int j = 1; j <= k; j++){ ptr[j] = j; } for (int i = 1; i <= n; i++){ for (int j = 1; j <= k; j++){ if (j >= i){ break; } while (ptr[j]+2 <= i){ int p = ptr[j]; ll v1 = dp[p][j-1].fr + qry(1, p) * qry(p+1, i); ll v2 = dp[p+1][j-1].fr + qry(1, p+1) * qry(p+2, i); if (v1 <= v2){ ptr[j] += 1; } else{ break; } } int p = ptr[j]; dp[i][j] = { dp[p][j-1].fr + qry(1, p) * qry(p+1, i), p }; } } cout << dp[n][k].fr << endl; int p = dp[n][k].sc; while (k--){ cout << p << ' '; p = dp[p][k].sc; } } int main(){ #ifndef DEBUG ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #endif cout.setf(ios::fixed); cout.precision(0); Main(); }
#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...