题目来源:https://www.jisuanke.com/contest/1410/85287
#include<iostream>
#include<functional>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define T 100000 + 50
struct node
{
ll v;
bool operator<(const node& b)const{
return v<b.v;
}
}a[T];
struct line
{
ll val;
line():val(0){}
line(ll _2):val(_2){}
bool operator<(const line& b)const{//重载
return val>b.val;
}
};
ll v[T];
bool cmp(const ll& a,const ll& b){return a>b;}
int main()
{
#ifdef zsc
freopen("input.txt","r",stdin);
#endif
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
ll c = 0;
ll sum = 0;
for(i=0;i<n;++i){
scanf("%lld",&a[i].v);
}
sort(a,a+n);
fill(v,v+T,0);
multiset< ll,greater<int> > Q;
multiset< ll,greater<int> >::iterator it;
ll k;
Q.insert(a[0].v+1000);
ll cnt;
for(i=1;i<n;++i){
it = Q.begin();
k = *it;
it = Q.lower_bound(a[i].v);
if(it==Q.end()){
Q.insert(a[i].v+1000);
}
else if(it!=Q.end()){
Q.erase(it);
Q.insert(a[i].v+1000);
}
}
cnt = Q.size();
Q.clear();
/*if(m==1){
printf("%lld\n",cnt);
continue;
}*/
if(cnt%m>0){
cnt = cnt/m+1;
}
else {
cnt = cnt/m;
}
printf("%lld\n",cnt);
}
return 0;
}