Submission #1150060

#TimeUsernameProblemLanguageResultExecution timeMemory
1150060notasingle...Split the sequence (APIO14_sequence)C++20
0 / 100
0 ms324 KiB
#include<bits/stdc++.h> using namespace std; long long n, k, p; long long lst[200005], slot[200005], trace[200005][201]; deque<pair<long long, long long>> D; inline long long f(pair<long long, long long> P, long long t){ return P.first + (lst[t] - lst[P.second])*(lst[t] - lst[P.second]); } inline long double meet(pair<long long, long long> P1, pair<long long, long long> P2){ return ((P1.first + P1.second * P1.second) - (P2.first + P2.second * P2.second)) * (long double)-.5 / (P2.second - P1.second); } inline void PB(pair<long long, long long> V){ while(D.size() > 1 && meet(D[D.size() - 2], V) <= meet(D.back(), V)) D.pop_back(); D.push_back(V); } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> k; p = n; for(long long i = 1; i <= n; ++i){ cin >> lst[i]; lst[i] += lst[i-1]; slot[i] = lst[i] * lst[i]; } for(long long _ = 1; _ <= k; ++_){ D.push_front({slot[_], _}); for(long long i = _ + 1; i <= n; ++i){ while(D.size() > 1 && f(D.front(), i) > f(D[1], i)) D.pop_front(); PB({slot[i], i}); slot[i] = f(D.front(), i); trace[i][_] = D.front().second; } while(!D.empty()) D.pop_front(); } cout << (lst[n] * lst[n] - slot[n]) / 2 << '\n'; while(k--){ p = trace[p][k+1]; cout << p << ' '; } }
#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...