Submission #590888

#TimeUsernameProblemLanguageResultExecution timeMemory
590888yutabiSorting (IOI15_sorting)C++14
100 / 100
371 ms16492 KiB
#include "sorting.h"


#include <bits/stdc++.h>
using namespace std;


#define pb push_back


typedef pair <int,int> ii;


int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[])
{
	M=N;

	int l=0;

	int r=M;

	int m=(l+r)/2;

	vector <ii> ans;

	while(l!=r)
	{
		vector <ii> nw;

		for(int i=0;i<m;i++)
		{
			nw.pb(ii(X[i],Y[i]));
		}

		int s[N];
		int loc[N];

		int fnl[N];
		int fnl_loc[N];

		int temp[N];

		for(int i=0;i<N;i++)
		{
			s[i]=S[i];
			loc[s[i]]=i;

			temp[i]=s[i];
		}

		for(int i=0;i<nw.size();i++)
		{
			swap(temp[nw[i].first],temp[nw[i].second]);
		}

		for(int i=0;i<N;i++)
		{
			fnl[i]=temp[i];

			fnl_loc[fnl[i]]=i;
		}

		int ptr=0;

		while(ptr<N && fnl[ptr]==ptr)
		{
			ptr++;
		}

		vector <ii> nw_ans;

		for(int i=0;i<m;i++)
		{
			swap(s[nw[i].first],s[nw[i].second]);

			swap(loc[s[nw[i].first]],loc[s[nw[i].second]]);

			if(ptr<N)
			{
				int num1=ptr;

				int num2=fnl[ptr];

				nw_ans.pb(ii(loc[num1],loc[num2]));

				swap(s[loc[num1]],s[loc[num2]]);

				swap(loc[num1],loc[num2]);


				swap(fnl[fnl_loc[num1]],fnl[fnl_loc[num2]]);

				swap(fnl_loc[num1],fnl_loc[num2]);
			}

			else
			{
				nw_ans.pb(ii(0,0));
			}

			while(ptr<N && fnl[ptr]==ptr)
			{
				ptr++;
			}
		}

		if(ptr==N)
		{
			ans=nw_ans;

			r=m;
		}

		else
		{
			l=m+1;
		}

		m=(l+r)/2;
	}


	for(int i=0;i<m;i++)
	{
		P[i]=ans[i].first;
		Q[i]=ans[i].second;
	}

	return m;
}


Compilation message (stderr)

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:51:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |   for(int i=0;i<nw.size();i++)
      |               ~^~~~~~~~~~
#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...