# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
557405 | Ai7081 | 수열 (APIO14_sequence) | C++17 | 498 ms | 83824 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll, ll>
const int N = 100005;
const int K = 205;
struct Line{
ll m, c, idx;
ll operator() (ll x) {return m*x + c;}
};
ll n, k, a, dp[2][N], sum[N];
int rev[K][N], ptr;
vector<Line> v;
bool check(Line x, Line y, Line z) {
return (z.c-y.c)*(x.m-y.m) < (y.c-x.c)*(y.m-z.m);
}
void add(Line L) {
while (v.size()>=2 && check(v[v.size()-2], v.back(), L)) v.pop_back();
while (!v.empty() && v.back().m == L.m && v.back().c <= L.c) v.pop_back();
v.push_back(L);
}
pii query(ll x) {
ptr = min(ptr, (int)v.size()-1);
while (ptr != v.size()-1 && v[ptr](x) <= v[ptr+1](x)) ptr++;
return {v[ptr](x), v[ptr].idx};
}
int main() {
scanf(" %lld %lld", &n, &k);
k++;
for (int i=1; i<=n; i++) scanf(" %lld", &a), sum[i] = sum[i-1] + a;
for (int i=2; i<=k; i++) {
ptr = 0;
v.clear();
for (int j=i; j<=n; j++) {
add({sum[j-1], dp[(i-1)&1][j-1] - sum[j-1]*sum[j-1], j-1});
pii res = query(sum[j]);
dp[i&1][j] = res.first;
rev[i][j] = res.second;
}
}
printf("%lld\n", dp[k&1][n]);
vector<ll> out;
while (rev[k][n]) {
out.push_back(rev[k][n]);
n = rev[k][n];
k--;
}
for (int i=out.size()-1; i>=0; i--) printf("%lld ", out[i]);
return 0;
}
/*
7 3
4 1 3 4 0 2 3
*/
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |