Submission #1223535

#TimeUsernameProblemLanguageResultExecution timeMemory
1223535boclobanchatSorting (IOI15_sorting)C++20
100 / 100
92 ms10096 KiB
#include"sorting.h"
#include<bits/stdc++.h>
using namespace std;
int findSwapPairs(int n,int S[],int m,int X[],int Y[],int P[],int Q[])
{
	int l=0,r=m,ans=0;
	while(l<=r)
	{
		int mid=(l+r)/2;
		vector<int> p(n),q(n);
		for(int i=0;i<n;i++) p[i]=i;
		for(int i=mid-1;i+1;i--) swap(p[X[i]],p[Y[i]]);
		for(int i=0;i<n;i++) q[p[i]]=i;
		for(int i=0;i<n;i++) p[i]=q[S[i]];
		for(int i=0;i<n;i++) q[p[i]]=i;
		int cnt=0;
		for(int i=0;i<n;i++)
		{
			int x=i,y=q[i];
			if(x!=y) cnt++,swap(p[x],p[y]),swap(q[p[x]],q[p[y]]);
		}
		if(cnt<=mid) r=mid-1,ans=mid;
		else l=mid+1;
	}
	vector<int> p(n),q(n);
	for(int i=0;i<n;i++) p[i]=i;
	for(int i=ans-1;i+1;i--) swap(p[X[i]],p[Y[i]]);
	for(int i=0;i<n;i++) q[p[i]]=i;
	for(int i=0;i<n;i++) p[i]=q[S[i]];
	for(int i=0;i<n;i++) q[p[i]]=i;
	int cnt=0;
	for(int i=0;i<n;i++)
	{
		int x=i,y=q[i];
		if(x!=y) P[cnt]=x,Q[cnt]=y,cnt++,swap(p[x],p[y]),swap(q[p[x]],q[p[y]]);
	}
	while(cnt<ans) P[cnt]=Q[cnt]=0,cnt++;
	for(int i=0;i<n;i++) p[i]=q[i]=i;
	for(int i=0;i<ans;i++)
	{
		int l=q[X[i]],r=q[Y[i]];
		swap(p[l],p[r]);
		swap(q[p[l]],q[p[r]]);
		P[i]=p[P[i]],Q[i]=p[Q[i]];
	}
	return ans;
}
#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...