Submission #438737

#TimeUsernameProblemLanguageResultExecution timeMemory
438737farukArranging Shoes (IOI19_shoes)C++17
10 / 100
1 ms288 KiB
#include <iostream> #include <algorithm> #include <map> #include <vector> #define ll long long using namespace std; class BIT { private: vector<ll> tree; int n; public: BIT(int sizeOfTree) { n = sizeOfTree; tree.resize(n + 1, 0); } void update(int index, ll value) { index++; while (index < n) tree[index] += value, index += index & (-index); } ll query(int index) { index++; ll out = 0; while (index > 0) out += tree[index], index -= index & (-index); return out; } }; map<int, vector<int> > located; map<int, int> used; map<int, bool> matched; ll count_swaps(vector<int> S) { int n = S.size(); BIT passed(n); for (int i = 0; i < n; i++) located[S[i]].push_back(i); ll out = 0; for (int i = 0; i < n; i++) { if (matched[i]) continue; int counterpart = upper_bound(located[-S[i]].begin(), located[-S[i]].end(), used[-S[i]]) - located[-S[i]].begin(); int val = located[-S[i]][counterpart]; matched[val] = true; int swaps = (val - i) /*+ passed.query(val)*/; passed.update(val, 1); used[-S[i]] = val; used[S[i]] = i; if (S[i] < 0) swaps--; out += swaps; } return out; }
#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...