# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1262240 | imann | Circus (Balkan15_CIRCUS) | C++20 | 63 ms | 12472 KiB |
#include <iostream>
#include <array>
#include <queue>
#include <algorithm>
#include <limits>
#include <map>
#include <vector>
const int MAX_N = 1000*100+2;
std::map<int, int> toMinAfter;
std::vector<int> minAftersKeys;
void init(int N, int M, int P[]) {
std::priority_queue<std::pair<int, bool>> elements;
for (int i = 0; i < N; ++i) {
elements.push({P[i], true});
}
std::priority_queue<std::pair<int, int>> minPQ;
toMinAfter[M] = M;
int minAfter = M;
while (!elements.empty()) {
auto [node, exist] = elements.top();
elements.pop();
while (!minPQ.empty() && minPQ.top().first >= node) {
minAfter = std::min(minAfter, minPQ.top().second);
minPQ.pop();
}
toMinAfter[node] = minAfter;
if (exist) {
int idx = 2 * node - minAfter;
if (idx >= 0) {
elements.push({idx, false});
minPQ.push({idx, node});
}
}
}
for (auto [k, v] : toMinAfter) {
minAftersKeys.push_back(k);
}
std::sort(minAftersKeys.begin(), minAftersKeys.end());
}
int minLength(int D) {
auto it = std::lower_bound(minAftersKeys.begin(), minAftersKeys.end(), D);
return toMinAfter[*it] - D;
}
컴파일 시 표준 에러 (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... |