#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
int minBuildTime( vector< int > & A, int S) {
int i;
int j;
int k;
int m;
int nd;
int N;
int cnt[ 1011 ] ;
int res;
N = A.size ( ) ;
sort( A.rbegin ( ) , A.rend ( ) ) ;
int Lj4PdHRW;
int KL2GvlyY;
int Q5VJL1cS;
Lj4PdHRW = 0 ;
KL2GvlyY = 1000000000 ;
while ( Lj4PdHRW < KL2GvlyY) {
if ( ( Lj4PdHRW + KL2GvlyY) % 2 == 0 ) {
Q5VJL1cS = ( Lj4PdHRW + KL2GvlyY) / 2 ;
}
else {
Q5VJL1cS = ( Lj4PdHRW + KL2GvlyY - 1 ) / 2 ;
}
for ( i= ( 0 ) ; i< ( N+ 1 ) ; i++ ) {
cnt[ i] = 0 ;
}
cnt[ 0 ] = 1 ;
m = 0 ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( cnt[ m] == 0 ) {
m++ ;
}
if ( cnt[ m] == 0 ) {
break ;
}
cnt[ m] -- ;
k = m * S;
if ( k + A[ i] > Q5VJL1cS) {
break ;
}
nd = N - i - 1 - cnt[ m] ;
for ( j= 1 ; nd> 0 ; j++ ) {
if ( k + S* j + A[ i] > Q5VJL1cS) {
break ;
}
cnt[ m+ j] ++ ;
nd - = cnt[ m+ j] ;
}
}
if ( i== N) {
KL2GvlyY = Q5VJL1cS;
}
else {
Lj4PdHRW = Q5VJL1cS + 1 ;
}
}
res = KL2GvlyY;
return res;
}
}
;
// cLay varsion 20190921-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// int minBuildTime(vector<int>& A, int S) {
// int i, j, k, m, nd, N;
// int cnt[1011];
// int res;
//
// N = A.size();
// sort(A.rbegin(), A.rend());
//
// res = bsearch_min[int,x,0,1d9][
// rep(i,N+1) cnt[i] = 0;
// cnt[0] = 1;
// m = 0;
// rep(i,N){
// if(cnt[m]==0) m++;
// if(cnt[m]==0) break;
// cnt[m]--;
// k = m * S;
// if(k + A[i] > x) break;
//
// nd = N - i - 1 - cnt[m];
// for(j=1;nd>0;j++){
// if(k + S*j + A[i] > x) break;
// cnt[m+j]++;
// nd -= cnt[m+j];
// }
// }
// ](i==N);
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBtaW5CdWlsZFRpbWUodmVjdG9yPGludD4mIEEsIGludCBTKXsKICAgIGludCBpOwogICAgaW50IGo7CiAgICBpbnQgazsKICAgIGludCBtOwogICAgaW50IG5kOwogICAgaW50IE47CiAgICBpbnQgY250WzEwMTFdOwogICAgaW50IHJlczsKICAgIE4gPSBBLnNpemUoKTsKICAgIHNvcnQoQS5yYmVnaW4oKSwgQS5yZW5kKCkpOwogICAgaW50IExqNFBkSFJXOwogICAgaW50IEtMMkd2bHlZOwogICAgaW50IFE1VkpMMWNTOwogICAgTGo0UGRIUlcgPSAwOwogICAgS0wyR3ZseVkgPSAxMDAwMDAwMDAwOwogICAgd2hpbGUoTGo0UGRIUlcgPCBLTDJHdmx5WSl7CiAgICAgIGlmKChMajRQZEhSVyArIEtMMkd2bHlZKSUyPT0wKXsKICAgICAgICBRNVZKTDFjUyA9IChMajRQZEhSVyArIEtMMkd2bHlZKSAvIDI7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBRNVZKTDFjUyA9IChMajRQZEhSVyArIEtMMkd2bHlZIC0gMSkgLyAyOwogICAgICB9CiAgICAgIGZvcihpPSgwKTtpPChOKzEpO2krKyl7CiAgICAgICAgY250W2ldID0gMDsKICAgICAgfQogICAgICBjbnRbMF0gPSAxOwogICAgICBtID0gMDsKICAgICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgICAgaWYoY250W21dPT0wKXsKICAgICAgICAgIG0rKzsKICAgICAgICB9CiAgICAgICAgaWYoY250W21dPT0wKXsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjbnRbbV0tLTsKICAgICAgICBrID0gbSAqIFM7CiAgICAgICAgaWYoayArIEFbaV0gPiBRNVZKTDFjUyl7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgbmQgPSBOIC0gaSAtIDEgLSBjbnRbbV07CiAgICAgICAgZm9yKGo9MTtuZD4wO2orKyl7CiAgICAgICAgICBpZihrICsgUypqICsgQVtpXSA+IFE1VkpMMWNTKXsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjbnRbbStqXSsrOwogICAgICAgICAgbmQgLT0gY250W20ral07CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmKGk9PU4pewogICAgICAgIEtMMkd2bHlZID0gUTVWSkwxY1M7CiAgICAgIH0KICAgICAgZWxzZXsKICAgICAgICBMajRQZEhSVyA9IFE1VkpMMWNTICsgMTsKICAgICAgfQogICAgfQogICAgcmVzID1LTDJHdmx5WTsKICAgIHJldHVybiByZXM7CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMTkwOTIxLTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IG1pbkJ1aWxkVGltZSh2ZWN0b3I8aW50PiYgQSwgaW50IFMpIHsKLy8gICAgIGludCBpLCBqLCBrLCBtLCBuZCwgTjsKLy8gICAgIGludCBjbnRbMTAxMV07Ci8vICAgICBpbnQgcmVzOwovLyAgICAgCi8vICAgICBOID0gQS5zaXplKCk7Ci8vICAgICBzb3J0KEEucmJlZ2luKCksIEEucmVuZCgpKTsKLy8gCi8vICAgICByZXMgPSBic2VhcmNoX21pbltpbnQseCwwLDFkOV1bCi8vICAgICAgIHJlcChpLE4rMSkgY250W2ldID0gMDsKLy8gICAgICAgY250WzBdID0gMTsKLy8gICAgICAgbSA9IDA7Ci8vICAgICAgIHJlcChpLE4pewovLyAgICAgICAgIGlmKGNudFttXT09MCkgbSsrOwovLyAgICAgICAgIGlmKGNudFttXT09MCkgYnJlYWs7Ci8vICAgICAgICAgY250W21dLS07Ci8vICAgICAgICAgayA9IG0gKiBTOwovLyAgICAgICAgIGlmKGsgKyBBW2ldID4geCkgYnJlYWs7Ci8vIAovLyAgICAgICAgIG5kID0gTiAtIGkgLSAxIC0gY250W21dOwovLyAgICAgICAgIGZvcihqPTE7bmQ+MDtqKyspewovLyAgICAgICAgICAgaWYoayArIFMqaiArIEFbaV0gPiB4KSBicmVhazsKLy8gICAgICAgICAgIGNudFttK2pdKys7Ci8vICAgICAgICAgICBuZCAtPSBjbnRbbStqXTsKLy8gICAgICAgICB9Ci8vICAgICAgIH0KLy8gICAgIF0oaT09Tik7Ci8vIAovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==