#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
void * wmem;
char memarr[ 96000000 ] ;
template < class T> inline void walloc1d( T ** arr, int x, void ** mem = & wmem) {
static int skip[ 16 ] = { 0 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } ;
( * mem) = ( void * ) ( ( ( char * ) ( * mem) ) + skip[ ( ( unsigned long long ) ( * mem) ) & 15 ] ) ;
( * arr) = ( T* ) ( * mem) ;
( * mem) = ( ( * arr) + x) ;
}
template < class T1> void sortA_L( int N, T1 a[ ] , void * mem = wmem) {
sort( a, a+ N) ;
}
template < class T1> void rsortA_L( int N, T1 a[ ] , void * mem = wmem) {
sortA_L( N, a, mem) ;
reverse( a, a+ N) ;
}
#define main dummy_main
int main( ) {
wmem = memarr;
return 0 ;
}
#undef main
int cnt[ 100000 ] ;
class Solution{
public :
int minSetSize( vector< int > & A) {
int i;
int k = 0 ;
int N = A.size ( ) ;
for ( i= ( 0 ) ; i< ( 100000 ) ; i++ ) {
cnt[ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
cnt[ A[ i] - 1 ] ++ ;
}
rsortA_L( 100000 , cnt) ;
for ( i= ( 0 ) ; i< ( 100000 ) ; i++ ) {
k + = cnt[ i] ;
if ( 2 * k >= N) {
return i+ 1 ;
}
}
return - 1 ;
}
}
;
// cLay varsion 20200214-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int cnt[1d5];
//
// class Solution {
// public:
// int minSetSize(vector<int>& A) {
// int i, k = 0, N = A.size();
// rep(i,1d5) cnt[i] = 0;
// rep(i,N) cnt[A[i]-1]++;
// rsortA(1d5, cnt);
// rep(i,1d5){
// k += cnt[i];
// if(2*k >= N) return i+1;
// }
// return -1;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgKndtZW07CmNoYXIgbWVtYXJyWzk2MDAwMDAwXTsKdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgd2FsbG9jMWQoVCAqKmFyciwgaW50IHgsIHZvaWQgKiptZW0gPSAmd21lbSl7CiAgc3RhdGljIGludCBza2lwWzE2XSA9IHswLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxfTsKICAoKm1lbSkgPSAodm9pZCopKCAoKGNoYXIqKSgqbWVtKSkgKyBza2lwWygodW5zaWduZWQgbG9uZyBsb25nKSgqbWVtKSkgJiAxNV0gKTsKICAoKmFycik9KFQqKSgqbWVtKTsKICAoKm1lbSk9KCgqYXJyKSt4KTsKfQp0ZW1wbGF0ZTxjbGFzcyBUMT4gdm9pZCBzb3J0QV9MKGludCBOLCBUMSBhW10sIHZvaWQgKm1lbSA9IHdtZW0pewogIHNvcnQoYSwgYStOKTsKfQp0ZW1wbGF0ZTxjbGFzcyBUMT4gdm9pZCByc29ydEFfTChpbnQgTiwgVDEgYVtdLCB2b2lkICptZW0gPSB3bWVtKXsKICBzb3J0QV9MKE4sIGEsIG1lbSk7CiAgcmV2ZXJzZShhLCBhK04pOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgd21lbSA9IG1lbWFycjsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgY250WzEwMDAwMF07CmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgbWluU2V0U2l6ZSh2ZWN0b3I8aW50PiYgQSl7CiAgICBpbnQgaTsKICAgIGludCBrID0gMDsKICAgIGludCBOID0gQS5zaXplKCk7CiAgICBmb3IoaT0oMCk7aTwoMTAwMDAwKTtpKyspewogICAgICBjbnRbaV0gPSAwOwogICAgfQogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGNudFtBW2ldLTFdKys7CiAgICB9CiAgICByc29ydEFfTCgxMDAwMDAsIGNudCk7CiAgICBmb3IoaT0oMCk7aTwoMTAwMDAwKTtpKyspewogICAgICBrICs9IGNudFtpXTsKICAgICAgaWYoMiprID49IE4pewogICAgICAgIHJldHVybiBpKzE7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAyMDAyMTQtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBpbnQgY250WzFkNV07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbWluU2V0U2l6ZSh2ZWN0b3I8aW50PiYgQSkgewovLyAgICAgaW50IGksIGsgPSAwLCBOID0gQS5zaXplKCk7Ci8vICAgICByZXAoaSwxZDUpIGNudFtpXSA9IDA7Ci8vICAgICByZXAoaSxOKSBjbnRbQVtpXS0xXSsrOwovLyAgICAgcnNvcnRBKDFkNSwgY250KTsKLy8gICAgIHJlcChpLDFkNSl7Ci8vICAgICAgIGsgKz0gY250W2ldOwovLyAgICAgICBpZigyKmsgPj0gTikgcmV0dXJuIGkrMTsKLy8gICAgIH0KLy8gICAgIHJldHVybiAtMTsKLy8gICB9Ci8vIH07Cg==