# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
750578 | M_W | 수열 (APIO14_sequence) | C++17 | 391 ms | 131072 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define ar array<long long, 3>
using namespace std;
long long dp[201][100001];
int pos[201][100001], qs[100001];
deque<ar> cht;
int idx = 0;
bool should_pop(ar cur, ar line1, ar line2){
if(cur[0] == line1[0] && cur[1] > line1[1]) return true;
return (line2[1] - cur[1]) * (cur[0] - line1[0]) >= (line1[1] - cur[1]) * (cur[0] - line2[0]);
}
long long f(ar line, long long x){
return line[0] * x + line[1];
}
pair<long long, int> query(long long x){
while(idx < cht.size() - 1 && f(cht[idx + 1], x) >= f(cht[idx], x)) cht.pop_front();
return {f(cht[0], x), cht[0][2]};
}
int main(int argc, char* argv[]){
int N, K; scanf("%d %d", &N, &K);
for(int i = 1; i <= N; i++){
scanf("%d", &qs[i]);
qs[i] += qs[i - 1];
}
long long ans = 0;
int maxj = 0;
for(int i = 1; i <= K; i++){
cht.push_back({qs[i - 1] * 1ll, dp[i - 1][i - 1] - (qs[N] * 1ll * (qs[i - 1] * 1ll)), i - 1});
for(int j = i; j < N; j++){
long long const_val = qs[j] * 1ll * (qs[N] * 1ll - qs[j] * 1ll);
pair<long long, int> res = query(qs[j] * 1ll);
dp[i][j] = const_val + res.first;
pos[i][j] = res.second;
if(dp[i][j] >= ans){
ans = dp[i][j];
maxj = j;
}
ar cur = {qs[j] * 1ll, dp[i - 1][j] - (qs[N] * 1ll * (qs[j] * 1ll)), j};
while(cht.size() > 1){
int sz = cht.size();
if(should_pop(cur, cht[sz - 1], cht[sz - 2])) cht.pop_back();
else break;
}
if(cht.empty() || cur[0] > cht.back()[0] || (cur[0] == cht.back()[0] && cur[1] >= cht.back()[1])) cht.push_back(cur);
}
cht.clear();
}
printf("%lld\n", ans);
for(int i = K; i > 0; i--){
printf("%d ", maxj);
maxj = pos[i][maxj];
}
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... |