#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
int n,a[maxn],q[maxn],siz[maxn],top;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
/* for(int j=1;j<=top;j++)
cout<<q[j]<<' ';
cout<<endl;*/
int pos=upper_bound(q+1,q+1+n,a[i])-q-1;
if(pos>top) pos=top;
if(q[pos]==a[i]) q[pos]++,siz[pos]++;
else q[++top]=a[i]+1,siz[top]++;
}
int ans=0x7ffffff;
for(int i=1;i<=top;i++)
ans=min(siz[i],ans);
cout<<ans;
return 0;
}
用数据
4
1 1 2 2去测就会炸
明明中间q数组已经刷新但pos就是会越界