其实这个题用 map 的话很好解决
本题采用离散化解决,利用桶排的思想,因为桶无法申请那么大的内存,所以进行离散化
算法复杂度为排序复杂度 O(n^2)
const int N=1e5+5;
int i,j,k;
int n,m,t;
pii a[N],cnt[N];
vector<int> v,ans;
int get_id(int x)
{
return lower_bound(v.begin(),v.end(),x)-v.begin()+1;
}
bool cmp(pii a,pii b)
{
return a.fr>b.fr;
}
int main()
{
//IOS;
rush(){ ans.clear(); v.clear(),ms(cnt,0);
sd(n);
for(int i=1;i<=n;i++) sd(a[i].fr),v.pb(a[i].fr);
sort(v.begin(),v.end());
int maxx=0;
v.erase(unique(v.begin(),v.end()),v.end());
for(int i=1;i<=n;i++) a[i].sc=get_id(a[i].fr),maxx=max(maxx,a[i].sc);
for(int i=1;i<=n;i++) cnt[a[i].sc].fr++,cnt[a[i].sc].sc=a[i].fr;
sort(cnt+1,cnt+1+n,cmp);
ans.pb(cnt[1].sc);
for(int i=2;i<=n;i++) if(cnt[i].fr==cnt[1].fr) ans.pb(cnt[i].sc);
int len=ans.size();
if(len==maxx) pd(-1);
else {
pd(len);
sort(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++) cout<<ans[i]<<" ";
puts("");
}
}
//PAUSE;
return 0;
}