C. 제조사 그것은 평등
테스트 당 시간 제한
이초
시험 당 메모리 제한
256메가바이트
입력
표준 입력
산출
표준 출력
윈 타워로 구성된 장난감 빌딩이있다. 각 타워는 서로에 서 여러 조각으로 구성되어 있습니다. 이 높이를 갖도록 hihi 2-1 번째 타워 hihicubes 구성된다.
의는 다음과 같은 몇 가지 높이에 HH를 조작 슬라이스를 정의 할 수 있습니다 : 높이가 HH보다 큰 경우 각 타워 II를 들어, 타워의 높이가 HH에 동일하게 일부 최고 큐브를 제거합니다. 하나의 "조각"의 비용은 모두 타워에서 제거 된 큐브의 총 수와 같습니다.
좋은 하나하자 이름 슬라이스는 비용이 낮은 또는 KK (k≥nk≥n)와 동일합니다.
모든 타워는 높이가 동일하게해야 할 좋은 조각의 최소 수를 계산합니다. 물론, 그렇게 그것을 확인하는 것이 가능하다.
입력
각 타워의 수와 분할에 대한 제한, - 첫 번째 라인은 두 정수 NN 및 KK (1≤n≤2⋅1051≤n≤2⋅105, n≤k≤109n≤k≤109)을 포함한다.
두번째 라인 NN 분리 정수 H1 공간 H2 포함 ... hnh1, H2, ..., HN (1≤hi≤2⋅1051≤hi≤2⋅105) - 탑의 초기 높이.
산출
모든 타워가 같은 heigth를 만들기 위해해야 할 좋은 조각의 최소 번호 - 하나 개의 정수를 인쇄합니다.
예
입력
부
5 5 3 1 2 2 4
산출
부
이
입력
부
4 5 1 2 3 4 5
산출
부
이
노트
첫 번째 예에서는 22 개 조각을 만들기 위해 최적입니다. 제 슬라이스 높이 22 (비용은 33이다)에 있고, 두 번째는 높이 (11) (그 비용은 44이다)에있다.
질문의 의미 :
N 열이 있으며, i 번째 열의 높이 안녕, 천장 (K)의 비용은 각각의 오퍼레이터는 높이 X를 선택할 수 있으며, 예컨대 하이 최소가된다 (HI, X)
그러나 비용 합계 요구 (HI 분 (HI, X)) <= K;
Q. 모두 같은 몇 가지 X와 같은 하이의 최소 필요합니다.
처음에 + - 절반 욕심과 함께하고 싶어하지만,이 장소가 조정 반 너무 어렵다, TLE3을하고있다 ..
불편
그것에 대해 생각하면 완성, 사실, 그렇게 할 수 있습니다.
업데이트 곳에서 욕심만큼 합으로 <k는 아래로 계속됩니다. 알고를 시작합니다.
추가 된 값은 O (1) 쿼리 수, 당신은 유사한 접두사와 아이디어를 사용할 수 있어야합니다. 통계의 수를 각각의 높이 및 누적을 위해.
코드 :
#include <bits/stdc++.h>
#include <stdio.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
typedef long long ll;
const int maxn = 2e5+10;
const int mod =1e9+7;
const int inf = 0x3f3f3f3f;
using namespace std;
ll a[maxn];
ll n,k;
ll cot[maxn];
int main(int argc, char const *argv[])
{
cin>>n>>k;
ll ma = -inf,mi = inf;
rep(i,1,n)
{
cin>>a[i];
cot[a[i]]++;
ma = max(ma,a[i]);
mi = min(mi,a[i]);
}
for (int i = ma; i>=1; --i)
cot[i] += cot[i + 1];
ll ans = 0;
ll now = 0;
for(int i = ma; i > mi ;i--)
{
if( now + cot[i] > k)
{
ans++;
now = 0;
}
now+= cot[i];
}
if (now) ans++;
cout<<ans<<endl;
return 0;
}