# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
532753 | sliviu | Sorting (IOI15_sorting) | C++17 | 176 ms | 21684 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
int findSwapPairs(int n, int s[], int m, int x[], int y[], int s1[], int s2[]) {
vector<int> p(n);
for (int i = 0; i < n; ++i)
p[i] = s[i];
int okk = 1;
for (int i = 0; i < n; ++i)
if (p[i] != i)
okk = 0;
if (okk)
return 0;
int left = 0, right = n - 1;
auto ok = [&](int pos) {
auto p_ = p;
for (int i = 0; i <= pos; ++i)
swap(p_[x[i]], p_[y[i]]);
int ans = n;
vector<int> seen(n);
for (int i = 0; i < n; ++i)
if (!seen[i]) {
--ans;
seen[i] = 1;
for (int j = p_[i]; j != i; j = p_[j])
seen[j] = 1;
}
return ans <= pos + 1;
};
while (left < right) {
int m = (left + right) / 2;
if (ok(m))
right = m;
else
left = m + 1;
}
auto p_ = p;
for (int i = 0; i <= left; ++i)
swap(p_[x[i]], p_[y[i]]);
int cur = 0;
vector<int> seen(n), inv(n);
for (int i = 0; i < n; ++i)
if (!seen[i] && p_[i] != i) {
vector<int> sol = {i};
for (int j = p_[i]; j != i; j = p_[j])
sol.emplace_back(j), seen[j] = 1;
for (int i = 0; i < (int)sol.size() - 1; ++i)
s1[cur] = sol[i], s2[cur++] = sol[i + 1];
}
for (int i = 0; i < n; ++i)
inv[p[i]] = i;
for (int i = 0; i <= left; ++i) {
swap(inv[p[x[i]]], inv[p[y[i]]]);
swap(p[x[i]], p[y[i]]);
s1[i] = inv[s1[i]], s2[i] = inv[s2[i]];
swap(inv[p[s1[i]]], inv[p[s2[i]]]);
swap(p[s1[i]], p[s2[i]]);
}
return left + 1;
}
Compilation message (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... |