Submission #1150891

#TimeUsernameProblemLanguageResultExecution timeMemory
1150891gygArranging Shoes (IOI19_shoes)C++20
50 / 100
1098 ms28608 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define sig signed
#define int long long
#define arr array 
#define vec vector 
#define pii pair<int, int>
#define fir first 
#define sec second
const int N = 2e5 + 5;

int n;
arr<int, N> a;

arr<int, N> prm;
void prm_cmp() {
	map<int, vec<int>> ng, ps;
	for (int i = 1; i <= n; i++) {
		if (a[i] < 0) ng[-a[i]].push_back(i);
		else ps[a[i]].push_back(i);
	}

	vec<pii> ord;
	for (pair<int, vec<int>> x : ng) 
		for (int i = 0; i < x.sec.size(); i++)
			ord.push_back({x.sec[i], ps[x.fir][i]});

	auto cmp = [](pii x, pii y) {
		return min(x.fir, x.sec) < min(y.fir, y.sec);
	};
	sort(ord.begin(), ord.end(), cmp);

	for (int i = 0; i < ord.size(); i++)
		prm[ord[i].fir] = 2 * i + 1, prm[ord[i].sec] = 2 * i + 2;
}

int ans_cmp() {
	int ans = 0;
	for (int i = 1; i <= n; i++)
		for (int j = i + 1; j <= n; j++)
			ans += (prm[i] > prm[j]);
	return ans;
}

int count_swaps(vec<sig> _a) {
	n = _a.size();
	for (int i = 1; i <= n; i++) a[i] = _a[i - 1];

	prm_cmp();
	int ans = ans_cmp();

	// for (int i = 1; i <= n; i++) cout << i << ": " << prm[i] << '\n';

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