제출 #1299814

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

long long n, ans, fn[500005], vs[500005];
map <long long, set<long long>> vis;
void upd(long long x) {
	for(; x <= 2 * n; x += (x & (-x))) {
		fn[x]++;
	}
	return;
}
long long find(long long x) {
	long long sum = 0;
	for(; x > 0; x -= (x & (-x))) {
		sum += fn[x];
	}
	return sum;
}

long long count_swaps(vector<int> s) {
	n = (long long)s.size();
	for(long long i = 0; i < n; i++) {
		vis[s[i]].insert(i);
	}
	for(long long i = 0; i < n; i++) {
		if(vs[i]) continue;
		long long p = *vis[(-1) * s[i]].begin();
		long long x1 = find(p) - find(i - 1);
		upd(p);
		ans += (p - i - 1) - x1; 
		vs[p] = 1;
		vis[-s[i]].erase(p);
		vis[s[i]].erase(i);
		if(s[i] > 0) ans++;
	}
	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...