Submission #1291198

#TimeUsernameProblemLanguageResultExecution timeMemory
1291198kustov_vadim_533Sorting (IOI15_sorting)C++20
100 / 100
196 ms12628 KiB
#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <set>
#include <queue>
#include <array>
#include <map>
#include <random>
#include <bitset>
#include <stack>
#include <deque>
#include <random>
#include <unordered_set>
#include <unordered_map>
#include <string>
#include <chrono>
//#include "towns.h"

using namespace std;

typedef long long ll;
typedef long double ld;

mt19937 gen(chrono::steady_clock::now().time_since_epoch().count());

bool calc(int N, int S[], int T, int X[], int Y[], int P[], int Q[]) {
	vector<int> p1(N), p2(N);
	for (int i = 0; i < N; ++i) {
		p1[i] = S[i];
		p2[i] = S[i];
	}

	for (int i = 0; i < T; ++i) {
		swap(p2[X[i]], p2[Y[i]]);
	}

	vector<int> q1(N), q2(N);
	for (int i = 0; i < N; ++i) {
		q1[p1[i]] = i;
		q2[p2[i]] = i;
	}

	int j = 0;

	for (int i = 0; i < T; ++i) {
		swap(q1[p1[X[i]]], q1[p1[Y[i]]]);
		swap(p1[X[i]], p1[Y[i]]);

		P[i] = 0;
		Q[i] = 0;
		for (; j < N; ++j) {
			if (q2[j] != j) {
				P[i] = q1[j];
				Q[i] = q1[p2[j]];
				break;
			}
		}

		swap(p2[q2[p1[P[i]]]], p2[q2[p1[Q[i]]]]);
		swap(q2[p1[P[i]]], q2[p1[Q[i]]]);

		swap(q1[p1[P[i]]], q1[p1[Q[i]]]);
		swap(p1[P[i]], p1[Q[i]]);
	}
	for (; j < N; ++j) {
		if (q2[j] != j) {
			return false;
		}
	}
	return true;
}

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
	int li = -1, ri = M;
	while (ri - li > 1) {
		int t = (li + ri) / 2;

		if (calc(N, S, t, X, Y, P, Q)) {
			ri = t;
		}
		else {
			li = t;
		}
	}
	calc(N, S, ri, X, Y, P, Q);
	return ri;
}

#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...