# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
96946 | Kastanda | Swap (BOI16_swap) | C++11 | 1163 ms | 160308 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// Borrowed.
#include<bits/stdc++.h>
using namespace std;
const int N = 4e5 + 10;
int n, l, r, A[N], R[N], rev[N];
set < int > S[N], B[N];
bitset < N > M;
inline bool Check(int id, int val)
{
if (M[val])
return (1);
while (id)
{
if (B[id].count(val))
return (1);
id >>= 1;
}
return (0);
}
inline bool Sub(int id, int pr)
{
while (id)
{
if (id == pr)
return (1);
id >>= 1;
}
return (0);
}
int main()
{
scanf("%d", &n);
memset(A, 1, sizeof(A));
for (int i = 1; i <= n; i++)
scanf("%d", &A[i]), S[i].insert(A[i]), rev[A[i]] = i;
for (int i = 1; i <= n; i++)
{
int lc = i * 2, rc = lc + 1;
int best = *S[i].begin();
while (Check(i, best))
{
S[i].erase(S[i].begin());
assert(S[i].size() != 0);
best = *S[i].begin();
}
if (best < A[lc] && best < A[rc])
{
R[i] = best;
M[best] = 1;
if (Sub(i, rev[best]))
{
int pr = rev[best], id = i;
while (id > pr)
{
for (auto X : S[(id >> 1)])
B[id^1].insert(X);
B[id].insert(A[id ^1]);
id >>= 1;
S[id].clear();
}
}
else
{
int pr = rev[best];
B[pr].insert(A[pr]);
for (auto X : S[(pr >> 1)])
B[pr^1].insert(X);
int id = i;
pr ^= 1;
while (id > pr)
{
for (auto X : S[(id >> 1)])
B[id^1].insert(X);
B[id].insert(A[id ^1]);
id >>= 1;
S[id].clear();
}
}
//S[i].clear();
continue;
}
if (A[lc] < A[rc])
{
R[i] = A[lc];
M[R[i]] = 1;
S[lc].clear();
for (auto X : S[i])
S[lc].insert(X);
//S[i].clear();
continue;
}
R[i] = A[rc];
M[R[i]] = 1;
S[rc].clear();
S[rc].insert(A[lc]);
S[lc].insert(A[lc]);
for (auto X : S[i])
{
S[lc].insert(X);
S[rc].insert(X);
}
//S[i].clear();
}
for (int i = 1; i <= n; i++)
printf("%d ", R[i]);
}
컴파일 시 표준 에러 (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... |