Submission #1266625

#TimeUsernameProblemLanguageResultExecution timeMemory
1266625thewizardmanArranging Shoes (IOI19_shoes)C++20
50 / 100
40 ms20808 KiB
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

ll n, ans, fw[100000];
bool flag[100000];
set<int> s[100001], ns[100001];

void update(int i) {
	for (; i < n; i = i | (i+1)) fw[i]++;
}

ll query(int i) {
	ll ret = 0;
	for (; i >= 0; i = (i & (i+1)) - 1) ret += fw[i];
	return ret;
}

long long count_swaps(std::vector<int> v) {
	n = v.size();
	for (int i = 0; i < n; i++) if (v[i] > 0) s[v[i]].insert(i); else ns[-v[i]].insert(i);
	for (int i = 0; i < n; i++) if (!flag[i]) {
		if (v[i] > 0) {
			ans += *ns[v[i]].begin()-i-(query(*ns[v[i]].begin())-query(i));
			update(*ns[v[i]].begin());
			flag[*ns[v[i]].begin()] = 1;
			s[v[i]].erase(i);
			ns[v[i]].erase(ns[v[i]].begin());
		} else {
			ans += *s[-v[i]].begin()-i-1-(query(*s[-v[i]].begin())-query(i));
			update(*s[-v[i]].begin());
			flag[*s[-v[i]].begin()] = 1;
			ns[-v[i]].erase(i);
			s[-v[i]].erase(s[-v[i]].begin());
		}
	}
	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...