Submission #594610

#TimeUsernameProblemLanguageResultExecution timeMemory
594610davi_bartSorting (IOI15_sorting)C++14
100 / 100
181 ms22576 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> #include "sorting.h" using namespace std; #define ll long long // #define int ll #define fi first #define se second #define ld long double #define pb push_back mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int N; vector<int> v; vector<int> ini; vector<pair<int, int>> scambi; vector<bool> vis(200010); void dfs(int pos, int ini) { vis[pos] = 1; scambi.pb({pos, v[pos]}); if (v[pos] == ini) return; dfs(v[pos], ini); } int findSwapPairs(int N, int S[], int M, int P[], int Q[], int X[], int Y[]) { ::N = N; for (int i = 0; i < N; i++) v.pb(S[i]); ini = v; int ans = 0; int l = 0, r = N + 2; while (l < r) { int m = (l + r) / 2; v = ini; fill(vis.begin(), vis.begin() + N + 10, 0); scambi.clear(); for (int i = 0; i < m; i++) { swap(v[P[i]], v[Q[i]]); } for (int j = 0; j < N; j++) { if (vis[j] || v[j] == j) continue; dfs(v[j], j); } if (scambi.size() <= m) r = m; else l = m + 1; } ans = l; v = ini; fill(vis.begin(), vis.begin() + N + 10, 0); scambi.clear(); for (int i = 0; i < l; i++) { swap(v[P[i]], v[Q[i]]); } for (int j = 0; j < N; j++) { if (vis[j] || v[j] == j) continue; dfs(v[j], j); } v = ini; vector<int> pos(N); for (int j = 0; j < N; j++) { pos[v[j]] = j; } for (int i = 0; i < ans; i++) { swap(v[P[i]], v[Q[i]]); swap(pos[v[P[i]]], pos[v[Q[i]]]); if (i >= scambi.size()) { X[i] = 0; Y[i] = 0; continue; } X[i] = pos[scambi[i].fi]; Y[i] = pos[scambi[i].se]; // int k = pos[v[X[i]]]; swap(v[X[i]], v[Y[i]]); swap(pos[v[X[i]]], pos[v[Y[i]]]); } return ans; }

Compilation message (stderr)

sorting.cpp: In function 'void dfs(int, int)':
sorting.cpp:18:23: warning: declaration of 'ini' shadows a global declaration [-Wshadow]
   18 | void dfs(int pos, int ini) {
      |                   ~~~~^~~
sorting.cpp:15:13: note: shadowed declaration is here
   15 | vector<int> ini;
      |             ^~~
sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:24:23: warning: declaration of 'N' shadows a global declaration [-Wshadow]
   24 | int findSwapPairs(int N, int S[], int M, int P[], int Q[], int X[], int Y[]) {
      |                   ~~~~^
sorting.cpp:13:5: note: shadowed declaration is here
   13 | int N;
      |     ^
sorting.cpp:42:27: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   42 |         if (scambi.size() <= m)
      |             ~~~~~~~~~~~~~~^~~~
sorting.cpp:69:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |         if (i >= scambi.size()) {
      |             ~~^~~~~~~~~~~~~~~~
sorting.cpp:24:39: warning: unused parameter 'M' [-Wunused-parameter]
   24 | int findSwapPairs(int N, int S[], int M, int P[], int Q[], int X[], int Y[]) {
      |                                   ~~~~^
#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...