1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <algorithm>
#include <vector>
#include <cassert>
#include <chrono>

int main()
{
    //std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
    std::ios::sync_with_stdio(false);
    std::cin.tie(NULL);
    int numbersCount;
    std::cin >> numbersCount;
    std::vector<int> numbers;
    numbers.reserve(numbersCount);
    for (int i = 0; i < numbersCount; ++i)
    {
      int number;
      std::cin >> number;
      numbers.push_back(number);
    }
    //std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
    std::sort(numbers.begin(), numbers.end());
    std::vector<int> counts;
    int count = 1;
    for (int i = 1; i < numbers.size(); ++i)
    {
      if (numbers[i] == numbers[i-1])
        count++;
      else
      {
        counts.push_back(count);
        count = 1;
      }
    }
    counts.push_back(count);
    std::sort(counts.begin(), counts.end());
    std::reverse(counts.begin(), counts.end());
    int includedCount = 0;
    for (int i = 0; i < numbersCount; ++i)
    {
      includedCount += 2 * counts[i] - 1;
      if (includedCount >= numbersCount)
      {
        std::cout << (i+1) << "\n";
        //std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
        //std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "[ms]" << std::endl;
        //std::cout << "AA\n";
        return 0;
      }
    }
    assert(false);
    return 0;
}