盒子

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;

}