Submission #782699

#TimeUsernameProblemLanguageResultExecution timeMemory
782699Sohsoh84선물상자 (IOI15_boxes)C++17
70 / 100
2058 ms213244 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 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); priority_queue<pll, vector<pll>, greater<pll>> pq; pq.push({0, -1}); for (int i = 0; i < N; i++) { while (pq.top().Y < i - K) pq.pop(); ps[i] = numeric_limits<ll>::max(); ps[i] = min(ps[i], pq.top().X + p[i] + min(L - p[i], p[i])); pq.push({ps[i], i}); } while (!pq.empty()) pq.pop(); ss[N] = 0; pq.push({0, N}); for (int i = N - 1; i >= 0; i--) { while (pq.top().Y > i + K) pq.pop(); ss[i] = numeric_limits<ll>::max(); ss[i] = min(ss[i], pq.top().X + (L - p[i]) + min(L - p[i], p[i])); pq.push({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...