이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "boxes.h"
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
using namespace std;
const int mxn=1e5+5;
const ll inf= 1e18;
ll delivery(int N, int K, int L, int p[]) {
ll pre[2 * N + K] = {};
deque<int> q;
for(int i = 0; i < N; i++) {
pre[i] = inf;
if(i < K) pre[i] = min(L,2 * p[i]);
while(!q.empty() && i - q.front() > K) q.pop_front();
if(!q.empty()) {
pre[i] = min(pre[i],pre[q.front()] + min(L,2 * p[i]));
}
while(!q.empty() && pre[q.back()] >= pre[i]) q.pop_back();
q.push_back(i);
}
while(!q.empty()) q.pop_back();
ll suf[2 * N + K] = {};
for(int i = N - 1; i >= 0; i--) {
suf[i] = inf;
if(N - i <= K) suf[i] = min(L,2 * (L - p[i]));
while(!q.empty() && q.front() - i > K) q.pop_front();
if(!q.empty()) {
suf[i] = min(suf[i],suf[q.front()] + min(L,2 *(L - p[i])));
}
while(!q.empty() && suf[q.back()] >= suf[i]) q.pop_back();
q.push_back(i);
}
ll res = suf[0];
for(int i = 0; i < N; i++) res = min(res,pre[i] + suf[i + 1]);
if(N <= K) res = min(res, 1ll * L);
return res;
}
# | 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... |