# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
117855 | zubec | 정렬하기 (IOI15_sorting) | C++14 | 73 ms | 24100 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 200100;
int n, a[N], pos[N];
pair<int, int> pr[N];
pair<int, int> anss[N];
int b[N];
int f(int m){
for (int i = 0; i < n; i++)
b[i] = a[i];
for (int i = 1; i <= m; i++){
swap(b[pr[i].first], b[pr[i].second]);
}
for (int i = 0; i < n; i++){
pos[b[i]] = i;
}
int ans = 0;
for (int i = 0; i < n; i++){
if (b[i] != i){
anss[ans] = {i, b[i]};
++ans;
int ps = b[i];
swap(b[i], b[pos[i]]);
swap(pos[ps], pos[i]);
}
}
if (ans > m)
return -1;
while(ans < m){
anss[ans] = {0, 0};
++ans;
}
return ans;
}
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
n = N;
for (int i = 0; i < n; i++)
a[i] = S[i];
for (int i = 0; i < M; i++){
pr[i+1] = {X[i], Y[i]};
}
int l = 0, r = M;
while(l < r){
int mid = (l+r)>>1;
if (f(mid) != -1)
r = mid; else
l = mid+1;
}
f(l);
for (int i = 0; i < n; i++)
pos[S[i]] = i;
for (int i = 0; i < l; i++){
swap(pos[S[X[i]]], pos[S[Y[i]]]);
swap(S[X[i]], S[Y[i]]);
int a = anss[i].first;
int b = anss[i].second;
P[i] = pos[a];
Q[i] = pos[b];
swap(S[pos[a]], S[pos[b]]);
swap(pos[a], pos[b]);
}
return l;
}
/**
5
3 0 4 2 1
5
1 1
4 0
2 3
1 4
0 4
*/
컴파일 시 표준 에러 (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... |