| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1334625 | zhehan | Arranging Shoes (IOI19_shoes) | C++20 | 0 ms | 0 KiB |
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
long long count_swaps(std::vector<int> s) {
int n = s.size();
vector<bool> swapping(n, false);
vector<int> parity(100000, 0);
map<int, queue<int>> key;
for (int i = 0; i < n; ++i) {
if (s[i] < 0) {
if (parity[abs(s[i])] == 1) {
swapping[i] = true;
}
} else {
if (parity[abs(s[i])] == 0) {
swapping[i] = true;
key[abs(s[i])].push(i);
}
}
parity[abs(s[i])] = 1 - parity[abs(s[i])];
}
int swaps = 0;
for (int i = 0; i < n; ++i) {
if (s[i] < 0 && swapping[i]) {
swaps += abs(key[abs(s[i])].front() - i);
key[abs(s[i])].pop();
}
}
return swaps;
}