제출 #1196396

#제출 시각아이디문제언어결과실행 시간메모리
1196396stdfloatArranging Shoes (IOI19_shoes)C++20
100 / 100
435 ms146764 KiB
#include <bits/stdc++.h>
#include "shoes.h"
// #include "grader.cpp"
using namespace std;

using ll = long long;

ll count_swaps(vector<int> s) {
	int n = (int)s.size();
	s.insert(s.begin(), 0);

	map<int, queue<int>> m;
	for (int i = 1; i <= n; i++)
		m[s[i]].push(i);

	vector<int> fn(n + 1);
	auto upd = [&](int x) {
		for (int i = x; i <= n; i += i & -i)
			fn[i]++;
	};
	auto fnd = [&](int x) {
		int res = 0;
		for (int i = x; i > 0; i -= i & -i)
			res += fn[i];

		return res;
	};

	ll cnt = 0;
	for (int i = 1; i <= n; i++) {
		if (i != m[s[i]].front()) continue;

		m[s[i]].pop();

		int j = m[-s[i]].front(); m[-s[i]].pop();

		cnt += j - i - (fnd(j) - fnd(i)) - (s[i] < 0);

		upd(j);
	}

	return cnt;
}
#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...