n<=500000,每个a[i]<=10^9
一堆盒子,不能并排放,每个a[i]代表一个强度(这个盒子上能放几个盒子),问最少堆几堆
#include<bits/stdc++.h>
using namespace std;
int n,a[500001],ji[500001],jii;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
ji[0]=1;jii++;
for(int i=1;i<n;i++)
{
bool shi=0;
for(int j=0;j<jii;j++)
{
if(a[i]>=ji[j])
{
ji[j]++;shi=1;break;
}
}
if(shi==0)
{
ji[jii]=1;jii++;
}
}
cout<<jii;
}