# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
33806 | ztrong | 수열 (APIO14_sequence) | C++14 | 66 ms | 84604 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define llint long long
#define fi first
#define se second
void openFile() {
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
#ifdef Tr___
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
#endif
}
const int maxN = 1e5 + 5;
const int maxM = 2e2 + 5;
const llint INF = 1e9 + 7;
int N, K;
llint a[maxN];
llint f[maxN][2];
int t[maxN][maxM];
vector<llint> A, B;
vector<int> id;
int pointer;
//y = A * x + B;
inline void enter() {
scanf("%d %d", &N, &K);
for (int i = 1; i <= N; ++i) {
scanf("%lld", &a[i]);
a[i] += a[i - 1];
}
}
void clear() {
A.resize(0);
B.resize(0);
id.resize(0);
pointer = 0;
}
bool bad(int l1, int l2, int l3) {
return (B[l3] - B[l1]) * (A[l1] - A[l2])
>= (B[l2] - B[l1]) * (A[l1] - A[l3]);
}
void add(llint a, llint b, int i) {
A.push_back(a);
B.push_back(b);
id.push_back(i);
while (A.size() >= 3 && bad(A.size()-3, A.size() - 2, A.size() - 1)) {
A.erase(A.end() - 2);
B.erase(B.end() - 2);
id.erase(id.end() - 2);
}
}
pair<llint, int> query(llint x) {
if (pointer >= A.size())
pointer = A.size() - 1;
while (pointer < A.size() - 1 &&
A[pointer] * x + B[pointer]
< A[pointer + 1] * x + B[pointer + 1])
pointer++;
return {A[pointer] * x + B[pointer], id[pointer]};
}
inline void solve() {
for (int k = 1; k <= K; ++k) {
clear();
add(0, 0, 0);
for (int i = k; i <= N; ++i) {
pair<llint, int> best = query(a[i]);
f[i][k&1] = best.fi;
t[i][k] = best.se;
add(a[i], f[i][!(k&1)] - a[i] * a[i], i);
}
}
printf("%lld\n", f[N][K&1]);
int trace = t[N][K];
while (trace) {
printf("%d ", trace);
trace = t[trace][--K];
}
}
int main() {
openFile();
enter();
solve();
return 0;
}
컴파일 시 표준 에러 (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... |