Submission #568449

#TimeUsernameProblemLanguageResultExecution timeMemory
568449d4xnArranging Shoes (IOI19_shoes)C++17
10 / 100
1 ms212 KiB
#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]]; } } // buscar zapatilla derecha de sz abs(s[i]) mas cercana // y ponerla a la derecha ll idx = next[i]; swaps += idx - i - 1; if (newNextSame.count(-s[i])) { if (newNextSame[-s[i]] > nextSame[idx]) { nextSame[idx] = newNextSame[-s[i]]; } } int nx = nextSame[idx]; newNext[s[i]] = nx; newNextSame[-s[i]] = nx; vis[idx] = 1; if (s[i] > 0) swaps++; } return swaps; }
#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...