Submission #1313933

#TimeUsernameProblemLanguageResultExecution timeMemory
1313933voldi9Arranging Shoes (IOI19_shoes)C++20
0 / 100
0 ms332 KiB
#include "shoes.h" #include <cstdio> #include <vector> #include <deque> #include <cmath> #include <bit> #include <unordered_map> using namespace std; void inline update(vector<int>& removed, int pos) { while (pos > 1) removed[pos>>=1]++; } int inline sum(vector<int>& removed, int i, int j) { int res = 0; while (i >> 1 < j >> 1) { if ((i % 2) == 0) res += removed[i+1]; if ((j % 2) == 1) res += removed[j-1]; i >>= 1; j >>= 1; } return res; } long long count_swaps(std::vector<int> S) { long long res = 0; unordered_map<int, deque<int>> sizes[2]; int N = bit_ceil(S.size()); vector<int> removed(2*N, 0); for (int i=0; i<S.size(); i++) S[i] < 0 ? sizes[0][-S[i]].push_back(i) : sizes[1][-S[i]].push_back(i); for (int i=0; i<S.size(); i++) { if (sizes[S[i] > 0][abs(S[i])].front() > i) continue; int j = sizes[(S[i] < 0)][abs(S[i])].front(); sizes[(S[i] < 0)][abs(S[i])].pop_front(); sizes[(S[i] > 0)][abs(S[i])].pop_front(); res += j - i - sum(removed, N+i, N+j); update(removed, N+j); if (S[i] < 0) res--; } return res; } // int main() { // return 0; // }
#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...