# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
434024 | pliam | 정렬하기 (IOI15_sorting) | C++14 | 544 ms | 23372 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 200005
int from[MAXN];
int from_pos[MAXN];
int s_pos[MAXN];
int n;
int s[MAXN];
int* x;
int* y;
int p[MAXN];
int q[MAXN];
void change_from(int a,int b){
swap(from_pos[a],from_pos[b]);
from[from_pos[a]]=a;
from[from_pos[b]]=b;
}
void swap_s(int a,int b){
swap(s[a],s[b]);
s_pos[s[a]]=a;
s_pos[s[b]]=b;
}
bool check(int r){
for(int i=0;i<n;i++){
from[i]=i;
from_pos[i]=i;
s_pos[s[i]]=i;
}
for(int i=r-1;i>0;i--){
if(x[i]!=y[i]) change_from(x[i],y[i]);
}
int i=0;
for(int pos=0;pos<r;pos++){
if(x[pos]!=y[pos]) swap_s(x[pos],y[pos]);
while(i<n){
if(s_pos[i]!=from[i]) break;
i++;
}
if(i!=n){
p[pos]=from[i];
q[pos]=s_pos[i];
swap_s(p[pos],q[pos]);
i++;
}else{
p[pos]=0;
q[pos]=0;
}
if((pos<r-1)&&(x[pos+1]!=y[pos+1])) change_from(x[pos+1],y[pos+1]);
}
for(int i=0;i<n;i++){
if(s[i]!=i) return false;
}
return true;
}
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
n=N;
x=X;
y=Y;
for(int i=0;i<n;i++){
s[i]=S[i];
}
bool sorted=true;
for(int i=0;i<n;i++){
if(s[i]!=i) sorted=false;
}
if(sorted) return 0;
int k=N;
for(int b=N-1;b>0;b/=2){
while(k-b>0){
bool ans=check(k-b);
for(int i=0;i<n;i++){
s[i]=S[i];
}
if(!ans) break;
k-=b;
}
}
check(k);
for(int i=0;i<k;i++){
P[i]=p[i];
Q[i]=q[i];
}
return k;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |