Submission #599225

#TimeUsernameProblemLanguageResultExecution timeMemory
599225TemmieSorting (IOI15_sorting)C++17
20 / 100
4 ms3512 KiB
#include <bits/stdc++.h> int findSwapPairs(int n, int a[], int m, int u[], int v[], int uu[], int vv[]) { int l = 0, r = m, best = m; int inv[200'005]; int u1[200'005]; int v1[200'005]; int b[200'005]; while (l <= r) { int mid = (l + r) >> 1; for (int i = 0; i < n; i++) { b[i] = a[i]; } for (int i = 0; i < mid; i++) { std::swap(a[u[i]], a[v[i]]); } for (int i = 0; i < n; i++) { inv[a[i]] = i; } int need = 0; memset(u1, 0, sizeof(u1)); memset(v1, 0, sizeof(v1)); for (int i = 0; i < n; i++) { if (a[i] == i) { continue; } int node = i; while (a[node] != node) { std::swap(a[node], a[inv[node]]); u1[need] = node; v1[need] = inv[node]; need++; node = inv[node]; int x = node; int y = inv[node]; inv[a[x]] = x; inv[a[y]] = y; } } if (need <= mid) { for (int i = 0; i < mid; i++) { uu[i] = u1[i]; vv[i] = v1[i]; } best = mid; r = mid - 1; } else { l = mid + 1; } for (int i = 0; i < n; i++) { a[i] = b[i]; } } return best; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...