이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
int vis[200001],pos[200001];
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]){
bool ch=1;
for (int i=0;i<N;i++)
ch&=(S[i]==i);
if (ch)
return 0;
int l=0,r=M-1,kq=-1;
while (l<=r){
int mid=(l+r)>>1;
for (int i=0;i<=mid;i++)
swap(S[X[i]],S[Y[i]]);
for (int i=0;i<N;i++)
vis[i]=0;
int cnt=N;
for (int i=0;i<N;i++)
if (!vis[i]){
cnt--;
int j=i;
while (!vis[j]){
vis[j]=1;
j=S[j];
}
}
for (int i=mid;i>=0;i--)
swap(S[X[i]],S[Y[i]]);
if (cnt-1<=mid){
kq=mid;
r=mid-1;
}
else
l=mid+1;
}
for (int i=0;i<=kq;i++)
swap(S[X[i]],S[Y[i]]);
int id=0;
for (int i=0;i<N;i++){
while (i!=S[i]){
P[id]=i;
Q[id]=S[i];
swap(S[i],S[S[i]]);
id++;
}
pos[i]=i;
}
for (int i=id;i<=kq;i++)
P[i]=Q[i]=0;
for (int i=kq;i>=0;i--){
P[i]=S[P[i]];
Q[i]=S[Q[i]];
swap(S[pos[X[i]]],S[pos[Y[i]]]);
swap(pos[X[i]],pos[Y[i]]);
}
return kq+1;
}
# | 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... |