Submission #583861

#TimeUsernameProblemLanguageResultExecution timeMemory
583861M_WSorting (IOI15_sorting)C++17
36 / 100
13 ms468 KiB
#include <bits/stdc++.h> #define ii pair<int, int> using namespace std; int S[200002]; int gp = 0, pa[200002], from[200002], aa[200002]; bool vis[200002]; int findpa(int a){ return pa[a] == a ? a : findpa(pa[a]); } int findSwapPairs(int N, int S_tmp[], int M, int X[], int Y[], int P[], int Q[]) { for(int i = 0; i < N; i++){ S[i] = S_tmp[i]; pa[i] = -1; } for(int i = 0; i < N; i++){ if(vis[i]) continue; int cur = i; while(!vis[cur]){ vis[cur] = true; cur = S[cur]; } gp++; } // Already sorted if(N == gp){ P[0] = 0; Q[0] = 0; return 0; } // Nah for(int k = 0; k < N; k++){ swap(S[X[k]], S[Y[k]]); gp = 0; for(int i = 0; i < N; i++) vis[i] = false; for(int i = 0; i < N; i++){ if(vis[i]) continue; int cur = i; while(!vis[cur]){ vis[cur] = true; from[S[cur]] = cur; cur = S[cur]; } gp++; } if(N - k - 1 <= gp){ queue<ii> q; for(int i = 0; i < N; i++) vis[i] = false; for(int i = 0; i < N; i++){ if(vis[i]) continue; int cur = from[i]; vis[i] = true; while(!vis[cur]){ vis[cur] = true; q.push({i, cur}); cur = from[cur]; } } for(int i = 0; i < N; i++) aa[i] = i; for(int j = k; j >= 0; j--){ if(q.empty()) P[j] = Q[j] = 0; else{ auto [u, v] = q.front(); q.pop(); P[j] = aa[u]; Q[j] = aa[v]; swap(aa[X[j]], aa[Y[j]]); } } return k + 1; } } }

Compilation message (stderr)

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:12:43: warning: unused parameter 'M' [-Wunused-parameter]
   12 | int findSwapPairs(int N, int S_tmp[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                       ~~~~^
sorting.cpp:77:1: warning: control reaches end of non-void function [-Wreturn-type]
   77 | }
      | ^
#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...