This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vi vector<ll>
long long count_swaps(std::vector<int> s) {
ll swaps = 0;
ll n = s.size();
map<ll, ll> last; // ultima aparicion de zapatilla con sz x
vi next(n, -1); // idx de la pareja mas cercana de la zapatilla i
vi nextSame(n, -1); // idx de la zapatilla mas cercana de la misma sz
for (ll i = n-1; i >= 0; i--) {
if (last.count(-s[i])) next[i] = last[-s[i]];
if (last.count(s[i])) nextSame[i] = last[s[i]];
last[s[i]] = i;
}
vi vis(n, 0);
map<ll, ll> newNext; // nueva pareja mas cercana para zapatilla de sz x
map<ll, ll> newNextSame; // nueva zapatilla igual mas cercana para zapatilla de sz x
for (ll i = 0; i < n; i++) {
if (vis[i]) continue;
if (newNext.count(s[i])) {
if (newNext[s[i]] < next[i]) {
newNext.erase(s[i]);
}
else {
next[i] = newNext[s[i]];
}
}
if (newNextSame.count(s[i])) {
if (newNextSame[s[i]] < nextSame[i]) {
newNextSame.erase(s[i]);
}
else {
nextSame[i] = newNextSame[s[i]];
}
}
if (s[i] < 0) {
// buscar zapatilla derecha de sz abs(s[i]) mas cercana
// y ponerla a la derecha
ll idx = next[i];
swaps += idx - i - 1;
newNext[s[i]] = nextSame[idx];
newNextSame[-s[i]] = nextSame[idx];
vis[idx] = 1;
}
else {
// buscar zapatilla izquierda de sz abs(s[i]) mas cercana
// y ponerla a la izquierda
ll idx = next[i];
swaps += idx - i;
newNext[s[i]] = nextSame[idx];
newNextSame[-s[i]] = nextSame[idx];
vis[idx] = 1;
}
}
return swaps;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |