Submission #622418

# Submission time Handle Problem Language Result Execution time Memory
622418 2022-08-04T09:14:05 Z 8e7 Sorting (IOI15_sorting) C++17
54 / 100
2 ms 528 KB
//Challenge: Accepted
#include <bits/stdc++.h>
using namespace std;
#ifdef zisk
void debug(){cout << endl;}
template<class T, class ... U> void debug(T a, U ... b){cout << a << " ", debug(b...);}
template<class T> void pary(T l, T r){
	while (l != r) cout << *l << " ", l++;
	cout << endl;
}
#else
#define debug(...) 0
#define pary(...) 0
#endif
#define ll long long
#define maxn 200005
#define mod 1000000007
#define pii pair<int, int>
#define ff first
#define ss second
#include "sorting.h"

int findSwapPairs(int n, int S[], int M, int X[], int Y[], int P[], int Q[]) {
	int low = -1, up = M;
	vector<int> pos(n), rev(n);

	auto getp = [&] (int k) {
		vector<int> ret(n);
		vector<int> a(n);
		for (int i = 0;i < n;i++) a[i] = i;
		//[0, mid)
		for (int i = k-1;i >= 0;i--) {
			swap(a[X[i]], a[Y[i]]);	
		}
		for (int i = 0;i < n;i++) {
			pos[a[i]] = i;
			rev[i] = a[i];
			ret[a[i]] = S[i];
		}
		return ret;
	};
	while (low < up - 1) {
		int mid = (low + up) / 2;
		vector<int> v = getp(mid);
		vector<bool> vis(n, 0);
		int num = n;
		for (int i = 0;i < n;i++) {
			if (vis[i]) continue;
			int cur = i;
			do {
				vis[cur] = 1;
				cur = v[cur];
			} while (!vis[cur]);
			num--;
		}
		if (num <= mid) up = mid;
		else low = mid;
	}

	vector<int> v = getp(up);	
	vector<bool> vis(n, 0);
	vector<pii> sw;
	for (int i = 0;i < n;i++) {
		if (vis[i]) continue;
		int cur = i;
		do {
			vis[cur] = 1;
			if (!vis[v[cur]]) sw.push_back({cur, v[cur]});
			cur = v[cur];
		} while (!vis[cur]);
	}
	reverse(sw.begin(), sw.end());	
	for (int i = 0;i < up;i++) {
		int vx = rev[X[i]], vy = rev[Y[i]];	
		swap(rev[X[i]], rev[Y[i]]);
		swap(pos[vx], pos[vy]);
		P[i] = pos[sw[i].ff];
		Q[i] = pos[sw[i].ss];
	}
	return up;
}


# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 304 KB Output is correct
4 Correct 1 ms 296 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 300 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 304 KB Output is correct
4 Correct 1 ms 296 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 300 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 312 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 304 KB Output is correct
4 Correct 1 ms 296 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 300 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 308 KB Output is correct
17 Correct 1 ms 312 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 1 ms 296 KB Output is correct
20 Correct 1 ms 212 KB Output is correct
21 Correct 1 ms 468 KB Output is correct
22 Correct 1 ms 468 KB Output is correct
23 Correct 2 ms 468 KB Output is correct
24 Correct 1 ms 436 KB Output is correct
25 Correct 1 ms 436 KB Output is correct
26 Correct 1 ms 436 KB Output is correct
27 Correct 1 ms 428 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
4 Correct 1 ms 440 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 436 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 2 ms 468 KB Output is correct
9 Correct 2 ms 500 KB Output is correct
10 Correct 2 ms 436 KB Output is correct
11 Correct 2 ms 468 KB Output is correct
12 Correct 1 ms 468 KB Output is correct
13 Correct 2 ms 528 KB Output is correct
14 Incorrect 1 ms 340 KB Output isn't correct
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 468 KB Output is correct
4 Correct 1 ms 440 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 436 KB Output is correct
7 Correct 1 ms 468 KB Output is correct
8 Correct 2 ms 468 KB Output is correct
9 Correct 2 ms 500 KB Output is correct
10 Correct 2 ms 436 KB Output is correct
11 Correct 2 ms 468 KB Output is correct
12 Correct 1 ms 468 KB Output is correct
13 Correct 2 ms 528 KB Output is correct
14 Incorrect 1 ms 340 KB Output isn't correct
15 Halted 0 ms 0 KB -