제출 #782710

#제출 시각아이디문제언어결과실행 시간메모리
782710Sohsoh84선물상자 (IOI15_boxes)C++17
100 / 100
825 ms212864 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define X first #define Y second #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 2e7 + 10; ll ps[MAXN], ss[MAXN]; long long delivery(int N, int K, int L, int p[]) { sort(p, p + N); deque<pll> dq; dq.push_back({0, -1}); for (int i = 0; i < N; i++) { while (dq.front().Y < i - K) dq.pop_front(); ps[i] = numeric_limits<ll>::max(); ps[i] = min(ps[i], dq.front().X + p[i] + min(L - p[i], p[i])); while (!dq.empty() && dq.back().X >= ps[i]) dq.pop_back(); dq.push_back({ps[i], i}); } while (!dq.empty()) dq.pop_back(); ss[N] = 0; dq.push_back({0, N}); for (int i = N - 1; i >= 0; i--) { while (dq.front().Y > i + K) dq.pop_front(); ss[i] = numeric_limits<ll>::max(); ss[i] = min(ss[i], dq.front().X + (L - p[i]) + min(L - p[i], p[i])); while (!dq.empty() && dq.back().X >= ss[i]) dq.pop_back(); dq.push_back({ss[i], i}); } ll ans = min(ps[N - 1], ss[0]); for (int i = 0; i < N; i++) ans = min(ans, ps[i] + ss[i + 1]); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...