Submission #245724

#TimeUsernameProblemLanguageResultExecution timeMemory
245724luisoncppArranging Shoes (IOI19_shoes)C++17
100 / 100
687 ms146088 KiB
#include <algorithm> #include <iostream> #include <vector> #include <cstdint> #include <cstdlib> #include <cassert> #include <queue> #include <map> using ll = int64_t; template<typename T> using Vec = std::vector<T>; void GetFinalDestination(Vec<int>& S) { std::map<int, std::queue<int>> UnmatchedValue; int index = 0; for (int& num : S) { int bucket_id; if (!UnmatchedValue[-num].empty()) { auto prev_num = num; bucket_id = UnmatchedValue[-num].front(); UnmatchedValue[-prev_num].pop(); } else { UnmatchedValue[num].push(index); bucket_id = index; ++index; } num = bucket_id * 2 + (num > 0); } } ll SortAndCountInversions(Vec<int>& S, const ll start, const ll size) { if (size < 2) { return 0; } ll count = 0; ll izq = start; ll der = start + size/2; ll mid = der; ll end = start + size; count += SortAndCountInversions(S, izq, size / 2); count += SortAndCountInversions(S, der, size - (size / 2)); Vec<int> result; while (result.size() < size) { bool insert_left = true; if (izq >= mid || (der < end && S[der] < S[izq])) { insert_left = false; } if (insert_left) { result.push_back(S[izq]); ++izq; } else { result.push_back(S[der]); count += mid - izq; ++der; } } for (ll i = 0; i < size; ++i) { S[start + i] = result[i]; } return count; } int count_swaps(Vec<int> S) { GetFinalDestination(S); return SortAndCountInversions(S, 0, S.size()); }

Compilation message (stderr)

shoes.cpp: In function 'll SortAndCountInversions(Vec<int>&, ll, ll)':
shoes.cpp:44:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while (result.size() < size) {
         ~~~~~~~~~~~~~~^~~~~~
#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...