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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <bits/stdc++.h>

using namespace std;
int tab[1000006];
int il[1000006];
int il2[1000006];
deque <int> Q;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
   int n;
   cin>>n;
   for(int i=0; i<n; i++)cin>>tab[i];
   sort (tab,tab+n);
   int naj=0,licz=1,ile=0;
   for(int i=0;i<n;i++)
   {
       if(tab[i]==tab[i+1])
       {
           licz++;
       }
       else
       {
           naj=max(naj,licz);
           il[licz]++;
            il2[licz]++;
           licz=1;
           ile++;
       }
   }
   naj=max(naj,licz);
   int w1=0,w2=0;
   for(int i=1; i<=naj; i++)
   {
       while(il[i]--)Q.push_back(i);

   }
   while(!Q.empty())
   {
       int x=Q.back();
       Q.pop_back();
       w1++;
       int s=0;
       while(!Q.empty()&&s+Q.front()<x)
       {
           s+=Q.front();
           Q.pop_front();
       }
   }

   for(int i=naj; i>0; i--)
   {
       while(il2[i]>0)
       {
           il2[i]--;
           w2++;
           int s=0;
           for(int j=i-1;j>0&&s<i-1;j--)
           {
               while(il2[j]>0&&s+j<i)
               {
                   s+=j;
                   il2[j]--;
               }
           }
       }
   }
   int w;
   w=min(w1,w2);
   cout<<w;

    return 0;
}