# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
56941 | Plurm | 수열 (APIO14_sequence) | C++11 | 2059 ms | 105640 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int a[100005];
long long dp[100005][2]; // End with i, having j parts;
int qs[100005];
int par[100005][256];
vector<pair<long long,long long> > lines;
vector<int> idx;
inline long long M(int x){
return lines[x].first;
}
inline long long C(int x){
return lines[x].second;
}
inline bool bad(int x, int y, int z){
return (C(y)-C(x))*(M(x)-M(z)) >= (C(z)-C(x))*(M(x)-M(y));
}
inline void add(int i,long long m, long long c){
lines.emplace_back(m,c);
idx.push_back(i);
while(lines.size() >= 3 && bad(lines.size()-3, lines.size()-2, lines.size()-1)){
lines.pop_back();
lines.pop_back();
lines.emplace_back(m,c);
idx.pop_back();
idx.pop_back();
idx.push_back(i);
}
}
int ptr;
inline pair<int,long long> query(long long x){
if(ptr >= lines.size()) ptr = lines.size()-1;
while(ptr < lines.size()-1 && M(ptr+1)*x + C(ptr+1) > M(ptr)*x + C(ptr)) ptr++;
return make_pair(idx[ptr],M(ptr)*x + C(ptr));
}
int main(){
int n,k;
scanf("%d%d",&n,&k);
k++;
add(0,0,0);
for(int i = 1; i <= n; i++){
scanf("%d",a+i);
qs[i] = qs[i-1] + a[i];
dp[i][0] = -1e16;
}
for(int j = 1; j <= k; j++){
for(int i = max(1,j-1); i <= n; i++){
if(i >= j)
tie(par[i][j],dp[i][j % 2]) = query(qs[i]);
add(i,(long long)qs[i], dp[i][(j+1) % 2] - (long long)qs[i]*(long long)qs[i]);
}
lines.clear();
idx.clear();
ptr = 0;
}
printf("%lld\n",dp[n][k % 2]);
int x = n;
stack<int> stk;
for(int j = k; j > 1; j--){
x = par[x][j];
stk.push(x);
}
while(!stk.empty()){
printf("%d ",stk.top());
stk.pop();
}
}
컴파일 시 표준 에러 (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... |