제출 #1355570

#제출 시각아이디문제언어결과실행 시간메모리
1355570toast12정렬하기 (IOI15_sorting)C++20
36 / 100
3 ms580 KiB
#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    int lo = 0, hi = M;
    int temp[N];
    for (int i = 0; i < N; i++) temp[i] = S[i];
    while (lo < hi) {
        int mid = (lo+hi)/2;
        vector<int> pos_s(N);
        for (int i = 0; i < N; i++) pos_s[S[i]] = i;
        vector<int> v(N), pos_v(N);
        for (int i = 0; i < N; i++) v[i] = S[i];
        for (int i = 0; i < mid; i++) swap(v[X[i]], v[Y[i]]);
        for (int i = 0; i < N; i++) pos_v[v[i]] = i;
        int j = 0;
        for (int i = 0; i < mid; i++) {
            swap(pos_s[S[X[i]]], pos_s[S[Y[i]]]);
            swap(S[X[i]], S[Y[i]]);
            if (is_sorted(S, S+N)) break;
            while (j < N && v[j] == j) j++;
            int x = pos_s[j];
            int y = pos_s[v[j]];
            swap(pos_s[S[x]], pos_s[S[y]]);
            swap(S[x], S[y]);
            int a = pos_v[j], b = pos_v[v[j]];
            swap(pos_v[j], pos_v[v[j]]);
            swap(v[a], v[b]);
        }
        if (is_sorted(S, S+N)) hi = mid;
        else lo = mid+1;
        for (int i = 0; i < N; i++) S[i] = temp[i];
    }
    vector<int> pos_s(N);
    for (int i = 0; i < N; i++) pos_s[S[i]] = i;
    vector<int> v(N), pos_v(N);
    for (int i = 0; i < N; i++) v[i] = S[i];
    for (int i = 0; i < hi; i++) swap(v[X[i]], v[Y[i]]);
    for (int i = 0; i < N; i++) pos_v[v[i]] = i;
    int j = 0;
    for (int i = 0; i < hi; i++) {
        swap(pos_s[S[X[i]]], pos_s[S[Y[i]]]);
        swap(S[X[i]], S[Y[i]]);
        if (is_sorted(S, S+N)) break;
        while (j < N && v[j] == j) j++;
        int x = pos_s[j];
        int y = pos_s[v[j]];
        swap(pos_s[S[x]], pos_s[S[y]]);
        swap(S[x], S[y]);
        P[i] = x, Q[i] = y;
        int a = pos_v[j], b = pos_v[v[j]];
        swap(pos_v[j], pos_v[v[j]]);
        swap(v[a], v[b]);
    }
	return hi;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…