Submission #1247799

#TimeUsernameProblemLanguageResultExecution timeMemory
1247799kl0989eSorting (IOI15_sorting)C++20
0 / 100
183 ms14904 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pi pair<int, int> #define pl pair<ll, ll> #define vi vector<int> #define vl vector<ll> #define fi first #define se second #define pb push_back #define all(x) (x).begin(),(x).end() bool check(int n, int s[], int r, int x[], int y[], int p[], int q[]) { for (int i=0; i<r; i++) { swap(s[x[i]],s[y[i]]); swap(s[p[i]],s[q[i]]); } bool ok=1; for (int i=0; i<n; i++) { ok&=(s[i]==i); } return ok; } bool sorted(int n, int s[]) { bool ok=1; for (int i=0; i<n && ok; i++) { ok&=(s[i]==i); } return ok; } int findSwapPairs(int n, int s[], int m, int x[], int y[], int p[], int q[]) { if (n==1) { return 0; } int ss[n]; for (int i=0; i<n; i++) { ss[i]=s[i]; } vector<vi> lst(n,{m}); for (int i=m-1; i>=0; i--) { if (x[i]!=y[i]) { lst[x[i]].pb(i); lst[y[i]].pb(i); } } priority_queue<pi> qu; for (int i=0; i<n; i++) { if (s[i]==i) { continue; } qu.push({lst[i].back(),i}); } int ind=0; while (!sorted(n,s)) { if (x[ind]!=y[ind]) { if (s[x[ind]]==x[ind]) { qu.push({lst[x[ind]].back(),x[ind]}); } if (s[y[ind]]==y[ind]) { qu.push({lst[y[ind]].back(),y[ind]}); } } swap(s[x[ind]],s[y[ind]]); auto [time,i]=qu.top(); qu.pop(); if (s[i]==i || time!=lst[i].back()) { swap(s[x[ind]],s[y[ind]]); continue; } p[ind]=i; q[ind]=find(s,s+n,i)-s; swap(s[p[ind]],s[q[ind]]); if (x[ind]!=y[ind]) { lst[x[ind]].pop_back(); lst[y[ind]].pop_back(); if (s[x[ind]]!=x[ind]) { qu.push({lst[x[ind]].back(),x[ind]}); } if (s[y[ind]]!=y[ind]) { qu.push({lst[y[ind]].back(),y[ind]}); } } ind++; for (int i=0; i<n; i++) { cout << s[i] << " \n"[i==n-1]; } } assert(check(n,ss,ind,x,y,p,q)); return ind; }
#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...