https://codeforces.com/contest/1065/problem/C
n<=2e5 k<=1e9 hi<=2e5
给你一排参差不齐的塔,让你水平方向依次切掉上面的,且每一次切的总数不能超过k,问你最少切多少刀使得全部塔一样高。
枚举高度
5 5
3 1 2 2 4
2
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 1e6 + 10;
const int INF=0x3f3f3f3f;
ll n,k,cnt,ans,s;
ll z,cha[maxn],minn=INF,maxx;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>z;
cha[1]++;
cha[z+1]--;
minn=min(minn,z);
maxx=max(maxx,z);
}
for(int i=2;i<=maxx;i++){
cha[i]+=cha[i-1];
}
for(int i=maxx;i>minn;) //minn=1 1不能切
{
while(s+cha[i]<=k && i>minn)
{
s+=cha[i];
i--;
}
s=0;
ans++;
}
cout<<ans<<endl;
return 0;
}