aboutsummaryrefslogtreecommitdiff
path: root/store/works/life/2020-algorithm-contest/code/2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'store/works/life/2020-algorithm-contest/code/2.cpp')
-rw-r--r--store/works/life/2020-algorithm-contest/code/2.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/store/works/life/2020-algorithm-contest/code/2.cpp b/store/works/life/2020-algorithm-contest/code/2.cpp
new file mode 100644
index 0000000..2d5fded
--- /dev/null
+++ b/store/works/life/2020-algorithm-contest/code/2.cpp
@@ -0,0 +1,54 @@
+#include <iostream>
+#include <map>
+#include <vector>
+#include <algorithm>
+
+int main()
+{
+ int size;
+ std::cin >> size;
+ int target;
+ std::cin >> target;
+
+ std::map<int, int> nums;
+
+ for (int i = 0; i < size; i++)
+ {
+ int v;
+ std::cin >> v;
+
+ nums[v]++;
+ }
+
+ std::vector<int> counts;
+ std::vector<std::vector<int>> sets;
+
+ for (const auto &pair : nums)
+ {
+ auto iter = std::lower_bound(counts.cbegin(), counts.cend(), pair.second);
+ if (iter != counts.cend() && *iter == pair.second)
+ {
+ sets[iter - counts.cbegin()].push_back(pair.first);
+ }
+ else
+ {
+ const auto offset = iter - counts.cbegin();
+ counts.insert(iter, pair.second);
+ sets.insert(sets.cbegin() + offset, std::vector<int>{pair.first});
+ }
+ }
+
+ if (target > counts.size())
+ {
+ std::cout << 0;
+ }
+ else
+ {
+ const auto &set = sets[counts.size() - target];
+ std::cout << set.size() << '\n';
+ for (auto i : set)
+ std::cout << i << ' ';
+ }
+
+ return 0;
+}