#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
void sw(int i, int j, int pos[], int p[], int q[], int arr[], int tot) {
if (tot != -1) {
p[tot] = pos[i];
q[tot] = pos[j];
}
swap(pos[i], pos[j]);
swap(arr[pos[i]], arr[pos[j]]);
}
int findSwapPairs(int N, int arr[], int m, int x[], int y[], int p[], int q[]) {
int n = N;
swap(arr[x[0]], arr[y[0]]);
vector<int> endsUp(n, -1);
for (int i = 0; i < n; i++) {
int lastPlace = i;
for (int j = m-1; j >= i + 1; j--) {
if (x[j] == lastPlace || y[j] == lastPlace) {
lastPlace ^= (x[j] ^ y[j]);
}
}
endsUp[i] = lastPlace;
}
for (int i = 0; i < n; i++) assert(endsUp[i] == i);
int pos[n], should[n];
for (int i = 0; i < n; i++) {
pos[arr[i]] = i;
should[i] = endsUp[i];
}
for (int i = 0; i < n; i++) {
cout << should[i] << " ";
}
cout << "\n";
for (int i = 0; i < n; i++) {
sw(arr[should[i]], arr[pos[i]], pos, p, q, arr, i);
if (i < n-1) {
sw(arr[x[i+1]], arr[y[i+1]], pos, p, q, arr, -1);
}
}
for (int i = n; i < m; i++) {
sw(arr[x[i]], arr[y[i]], pos, p, q, arr, -1);
p[i] = q[i] = 0;
}
//for (int i = 0; i < n; i++) cout << arr[i] << " ";
//cout << '\n';
return m;
}
# | 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... |