이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 l = 0,r = M;
	while(l < r){
		int m = (l + r)/2;
		vector<int> v;
		for(int i = 0;i<N;i++){
			v.push_back(S[i]);
		}
		vector<int> ord(N,0);
		iota(ord.begin(),ord.end(),0);
		vector<int> pos = ord;
		for(int i = m-1;i>=0;i--){
			pos[ord[Y[i]]] = X[i];
			pos[ord[X[i]]] = Y[i];
			swap(ord[X[i]],ord[Y[i]]);
		}
		// for(auto u:v){
		// 	cout << u << ' ';
		// }
		// cout << endl;
		int last = -1;
		for(int i = 0;i<m;i++){
			pos[ord[Y[i]]] = X[i];
			pos[ord[X[i]]] = Y[i];
			swap(ord[X[i]],ord[Y[i]]);
			swap(v[X[i]],v[Y[i]]);
			last++;
			while(last < N && last == pos[v[last]]){
				last++;
			}
			if(last < N){
				swap(v[last],v[pos[v[last]]]);
			}
			// for(auto u:v){
			// 	cout << u << ' ';
			// }
			// cout << endl;
		}
		//cout << l << ' ' << r << endl;
		if(is_sorted(v.begin(),v.end())){
			r = m;
		}
		else l = m + 1;
	}
	vector<int> v;
	for(int i = 0;i<N;i++){
		v.push_back(S[i]);
	}
	vector<int> ord(N,0);
	iota(ord.begin(),ord.end(),0);
	vector<int> pos = ord;
	for(int i = l-1;i>=0;i--){
		pos[ord[Y[i]]] = X[i];
		pos[ord[X[i]]] = Y[i];
		swap(ord[X[i]],ord[Y[i]]);
	}
	// for(auto u:v){
	// 	cout << u << ' ';
	// }
	// cout << endl;
	int last = -1;
	for(int i = 0;i<l;i++){
		pos[ord[Y[i]]] = X[i];
		pos[ord[X[i]]] = Y[i];
		swap(ord[X[i]],ord[Y[i]]);
		swap(v[X[i]],v[Y[i]]);
		last++;
		while(last < N && last == pos[v[last]]){
			last++;
		}
		P[i] = Q[i] = 0;
		if(last < N){
			P[i] = last;
			Q[i] = pos[v[last]];
			swap(v[last],v[pos[v[last]]]);
		}
		// for(auto u:v){
		// 	cout << u << ' ';
		// }
		// cout << endl;
	}
	assert(is_sorted(v.begin(),v.end()));
	return l;
}
| # | 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... |