Submission #389604

#TimeUsernameProblemLanguageResultExecution timeMemory
389604faresbasbsSorting (IOI15_sorting)C++14
20 / 100
2 ms716 KiB
#include <bits/stdc++.h> #include "sorting.h" using namespace std; vector<int> v,v2,st,e,l,r; bool seen[200001]; int n,rt; void dfs(int curr){ if(curr != rt){ l.push_back(rt); r.push_back(curr); } seen[curr] = 1; if(!seen[v2[curr]]){ dfs(v2[curr]); } } bool work(int mid){ memset(seen,0,sizeof seen); l.clear(),r.clear(); v2 = v; for(int i = 0 ; i <= mid-1 ; i += 1){ swap(v2[st[i]],v2[e[i]]); } int num = n; for(int i = 0 ; i < n ; i += 1){ if(seen[i]){ continue; } num -= 1; rt = i; dfs(i); } return num <= mid; } int findSwapPairs(int N , int s[] , int m , int x[] , int y[] , int p[] , int q[]){ n = N; for(int i = 0 ; i < n ; i += 1){ v.push_back(s[i]); } for(int i = 0 ; i < m ; i += 1){ st.push_back(x[i]) , e.push_back(y[i]); } int first = -1 , last = m; while(last-first > 1){ int mid = (first+last)/2; if(work(mid)){ last = mid; }else{ first = mid; } } for(int i = 0 ; i < (int)l.size() ; i += 1){ p[i] = l[i] , q[i] = r[i]; } return last; }
#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...