Submission #256831

#TimeUsernameProblemLanguageResultExecution timeMemory
256831atoizArranging Shoes (IOI19_shoes)C++14
100 / 100
220 ms21308 KiB
#include "shoes.h" #include <iostream> #include <vector> #include <algorithm> #include <cassert> #include <cstring> #include <unordered_map> using namespace std; using ll = long long; #define FOR(i, a, b) for (int i = a; i <= b; ++i) #define FORA(i, a) for (auto &i : a) #define FORB(i, a, b) for (int i = a; i >= b; --i) ll count_swaps(vector<int> s) { int n = (int) s.size(); unordered_map<int, vector<int>> pos; FORB(i, n - 1, 0) pos[s[i]].push_back(i); vector<int> bit(n + 1, 0); ll ans = 0; FOR(i, 0, n - 1) if (pos[s[i]].back() == i) { pos[s[i]].pop_back(); if (s[i] < 0) { int j = pos[-s[i]].back(); pos[-s[i]].pop_back(); ans += i; for (int x = i + 1; x > 0; x -= x & (-x)) ans -= bit[x]; for (int x = i + 1; x <= n; x += x & (-x)) ++bit[x]; ans += j; for (int x = j + 1; x > 0; x -= x & (-x)) ans -= bit[x]; for (int x = j + 1; x <= n; x += x & (-x)) ++bit[x]; } else { int j = pos[-s[i]].back(); pos[-s[i]].pop_back(); ans += j; for (int x = j + 1; x > 0; x -= x & (-x)) ans -= bit[x]; for (int x = j + 1; x <= n; x += x & (-x)) ++bit[x]; ans += i; for (int x = i + 1; x > 0; x -= x & (-x)) ans -= bit[x]; for (int x = i + 1; x <= n; x += x & (-x)) ++bit[x]; } } 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...