This documentation is automatically generated by competitive-verifier/competitive-verifier
// competitive-verifier: PROBLEM https://yukicoder.me/problems/no/952
// competitive-verifier: TLE 1
// competitive-verifier: MLE 64
#include <iostream>
#include <numeric>
#include "src/Optimization/monotone_minima.hpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(false);
int N;
cin >> N;
int A[N];
for (int i= 0; i < N; ++i) cin >> A[i];
long long S[N + 1], dp[N + 2], ans[N];
S[0]= 0;
for (int i= 0; i < N; ++i) S[i + 1]= S[i] + A[i];
static constexpr long long INF= 1e17;
fill_n(dp, N + 2, INF), dp[0]= 0;
auto w= [&](int i, int j) { return (S[i] - S[j]) * (S[i] - S[j]); };
for (int l= N; l--;) {
auto select= [&](int i, int j, int k) { return dp[j] + w(i - 1, j) > dp[k] + w(i - 1, k); };
auto id= monotone_minima(N + 2, N + 1, select);
for (int i= N + 2; --i;) {
int j= id[i];
dp[i]= dp[j] + w(i - 1, j);
}
dp[0]= INF;
ans[l]= dp[N + 1];
}
for (int i= 0; i < N; ++i) cout << ans[i] << '\n';
return 0;
}
#line 1 "test/yukicoder/952.monotone_minima.test.cpp"
// competitive-verifier: PROBLEM https://yukicoder.me/problems/no/952
// competitive-verifier: TLE 1
// competitive-verifier: MLE 64
#include <iostream>
#include <numeric>
#line 2 "src/Optimization/monotone_minima.hpp"
#include <vector>
// select(i,j,k) -> true if (i,k) is better than (i,j)
template <typename F> std::vector<int> monotone_minima(int H, int W, const F &select) {
std::vector<int> ret(H);
auto rec= [&](auto &rec, int h1, int h2, int w1, int w2) -> void {
if (h1 == h2) return;
int h= (h1 + h2) / 2, best_w= w1;
for (int w= w1 + 1; w < w2; ++w)
if (select(h, best_w, w)) best_w= w;
ret[h]= best_w, rec(rec, h1, h, w1, best_w + 1), rec(rec, h + 1, h2, best_w, w2);
};
return rec(rec, 0, H, 0, W), ret;
}
#line 7 "test/yukicoder/952.monotone_minima.test.cpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(false);
int N;
cin >> N;
int A[N];
for (int i= 0; i < N; ++i) cin >> A[i];
long long S[N + 1], dp[N + 2], ans[N];
S[0]= 0;
for (int i= 0; i < N; ++i) S[i + 1]= S[i] + A[i];
static constexpr long long INF= 1e17;
fill_n(dp, N + 2, INF), dp[0]= 0;
auto w= [&](int i, int j) { return (S[i] - S[j]) * (S[i] - S[j]); };
for (int l= N; l--;) {
auto select= [&](int i, int j, int k) { return dp[j] + w(i - 1, j) > dp[k] + w(i - 1, k); };
auto id= monotone_minima(N + 2, N + 1, select);
for (int i= N + 2; --i;) {
int j= id[i];
dp[i]= dp[j] + w(i - 1, j);
}
dp[0]= INF;
ans[l]= dp[N + 1];
}
for (int i= 0; i < N; ++i) cout << ans[i] << '\n';
return 0;
}
Env | Name | Status | Elapsed | Memory |
---|---|---|---|---|
g++-13 | sample_1 |
![]() |
6 ms | 3 MB |
g++-13 | sample_2 |
![]() |
5 ms | 4 MB |
g++-13 | sample_3 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_1.txt |
![]() |
243 ms | 4 MB |
g++-13 | testcase_10.txt |
![]() |
137 ms | 4 MB |
g++-13 | testcase_11.txt |
![]() |
144 ms | 4 MB |
g++-13 | testcase_12.txt |
![]() |
34 ms | 4 MB |
g++-13 | testcase_13.txt |
![]() |
215 ms | 4 MB |
g++-13 | testcase_14.txt |
![]() |
43 ms | 4 MB |
g++-13 | testcase_15.txt |
![]() |
34 ms | 4 MB |
g++-13 | testcase_16.txt |
![]() |
58 ms | 4 MB |
g++-13 | testcase_17.txt |
![]() |
7 ms | 4 MB |
g++-13 | testcase_18.txt |
![]() |
6 ms | 4 MB |
g++-13 | testcase_19.txt |
![]() |
123 ms | 4 MB |
g++-13 | testcase_2.txt |
![]() |
240 ms | 4 MB |
g++-13 | testcase_20.txt |
![]() |
28 ms | 4 MB |
g++-13 | testcase_3.txt |
![]() |
190 ms | 4 MB |
g++-13 | testcase_4.txt |
![]() |
297 ms | 4 MB |
g++-13 | testcase_5.txt |
![]() |
94 ms | 4 MB |
g++-13 | testcase_6.txt |
![]() |
339 ms | 4 MB |
g++-13 | testcase_7.txt |
![]() |
344 ms | 4 MB |
g++-13 | testcase_8.txt |
![]() |
128 ms | 4 MB |
g++-13 | testcase_9.txt |
![]() |
7 ms | 4 MB |
g++-13 | testcase_tester_01.txt |
![]() |
6 ms | 3 MB |
g++-13 | testcase_tester_02.txt |
![]() |
13 ms | 3 MB |
g++-13 | testcase_tester_03.txt |
![]() |
375 ms | 4 MB |
clang++-18 | sample_1 |
![]() |
6 ms | 4 MB |
clang++-18 | sample_2 |
![]() |
6 ms | 4 MB |
clang++-18 | sample_3 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_1.txt |
![]() |
111 ms | 4 MB |
clang++-18 | testcase_10.txt |
![]() |
66 ms | 4 MB |
clang++-18 | testcase_11.txt |
![]() |
69 ms | 4 MB |
clang++-18 | testcase_12.txt |
![]() |
20 ms | 4 MB |
clang++-18 | testcase_13.txt |
![]() |
100 ms | 4 MB |
clang++-18 | testcase_14.txt |
![]() |
24 ms | 4 MB |
clang++-18 | testcase_15.txt |
![]() |
20 ms | 4 MB |
clang++-18 | testcase_16.txt |
![]() |
31 ms | 4 MB |
clang++-18 | testcase_17.txt |
![]() |
7 ms | 4 MB |
clang++-18 | testcase_18.txt |
![]() |
6 ms | 4 MB |
clang++-18 | testcase_19.txt |
![]() |
59 ms | 4 MB |
clang++-18 | testcase_2.txt |
![]() |
110 ms | 4 MB |
clang++-18 | testcase_20.txt |
![]() |
17 ms | 4 MB |
clang++-18 | testcase_3.txt |
![]() |
88 ms | 4 MB |
clang++-18 | testcase_4.txt |
![]() |
135 ms | 4 MB |
clang++-18 | testcase_5.txt |
![]() |
48 ms | 4 MB |
clang++-18 | testcase_6.txt |
![]() |
154 ms | 4 MB |
clang++-18 | testcase_7.txt |
![]() |
156 ms | 4 MB |
clang++-18 | testcase_8.txt |
![]() |
63 ms | 4 MB |
clang++-18 | testcase_9.txt |
![]() |
7 ms | 4 MB |
clang++-18 | testcase_tester_01.txt |
![]() |
6 ms | 4 MB |
clang++-18 | testcase_tester_02.txt |
![]() |
10 ms | 4 MB |
clang++-18 | testcase_tester_03.txt |
![]() |
159 ms | 4 MB |