#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
template < class T> struct cLtraits_identity{
using type = T;
}
;
template < class T> using cLtraits_try_make_signed =
typename conditional<
is_integral< T> :: value ,
make_signed< T> ,
cLtraits_identity< T>
> :: type ;
template < class S, class T> struct cLtraits_common_type{
using tS = typename cLtraits_try_make_signed< S> :: type ;
using tT = typename cLtraits_try_make_signed< T> :: type ;
using type = typename common_type< tS,tT> :: type ;
}
;
template < class S, class T> inline auto min_L( S a, T b)
- > typename cLtraits_common_type< S,T> :: type {
return ( typename cLtraits_common_type< S,T> :: type ) a <= ( typename cLtraits_common_type< S,T> :: type ) b ? a : b;
}
template < class S, class T> inline auto max_L( S a, T b)
- > typename cLtraits_common_type< S,T> :: type {
return ( typename cLtraits_common_type< S,T> :: type ) a >= ( typename cLtraits_common_type< S,T> :: type ) b ? a : b;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
long long minIncrementOperations( vector< int > & A, int k) {
int i;
int N = A.size ( ) ;
static long long dp[ 1000000 ] ;
for ( i= ( 0 ) ; i< ( 3 ) ; i++ ) {
dp[ i] = max_L( 0 , k - A[ i] ) ;
}
for ( i= ( 3 ) ; i< ( N) ; i++ ) {
dp[ i] = max_L( 0 , k - A[ i] ) + min_L( min_L( dp[ i- 1 ] , dp[ i- 2 ] ) , dp[ i- 3 ] ) ;
}
return min_L( min_L( dp[ N- 1 ] , dp[ N- 2 ] ) , dp[ N- 3 ] ) ;
}
}
;
// cLay version 20231031-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// ll minIncrementOperations(VI &A, int k) {
// int N = A.size();
// static ll dp[1d6];
// rep(i,3) dp[i] = max(0, k - A[i]);
// rep(i,3,N) dp[i] = max(0, k - A[i]) + min(dp[i-1], dp[i-2], dp[i-3]);
// return min(dp[N-1], dp[N-2], dp[N-3]);
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgY0x0cmFpdHNfaWRlbnRpdHl7CiAgdXNpbmcgdHlwZSA9IFQ7Cn0KOwp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBjTHRyYWl0c190cnlfbWFrZV9zaWduZWQgPQogIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAogICAgaXNfaW50ZWdyYWw8VD46OnZhbHVlLAogICAgbWFrZV9zaWduZWQ8VD4sCiAgICBjTHRyYWl0c19pZGVudGl0eTxUPgogICAgPjo6dHlwZTsKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQ+IHN0cnVjdCBjTHRyYWl0c19jb21tb25fdHlwZXsKICB1c2luZyB0UyA9IHR5cGVuYW1lIGNMdHJhaXRzX3RyeV9tYWtlX3NpZ25lZDxTPjo6dHlwZTsKICB1c2luZyB0VCA9IHR5cGVuYW1lIGNMdHJhaXRzX3RyeV9tYWtlX3NpZ25lZDxUPjo6dHlwZTsKICB1c2luZyB0eXBlID0gdHlwZW5hbWUgY29tbW9uX3R5cGU8dFMsdFQ+Ojp0eXBlOwp9CjsKdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIGF1dG8gbWluX0woUyBhLCBUIGIpCi0+IHR5cGVuYW1lIGNMdHJhaXRzX2NvbW1vbl90eXBlPFMsVD46OnR5cGV7CiAgcmV0dXJuICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBhIDw9ICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBiID8gYSA6IGI7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIGF1dG8gbWF4X0woUyBhLCBUIGIpCi0+IHR5cGVuYW1lIGNMdHJhaXRzX2NvbW1vbl90eXBlPFMsVD46OnR5cGV7CiAgcmV0dXJuICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBhID49ICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBiID8gYSA6IGI7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgbG9uZyBsb25nIG1pbkluY3JlbWVudE9wZXJhdGlvbnModmVjdG9yPGludD4gJkEsIGludCBrKXsKICAgIGludCBpOwogICAgaW50IE4gPSBBLnNpemUoKTsKICAgIHN0YXRpYyBsb25nIGxvbmcgZHBbMTAwMDAwMF07CiAgICBmb3IoaT0oMCk7aTwoMyk7aSsrKXsKICAgICAgZHBbaV0gPW1heF9MKDAsIGsgLSBBW2ldKTsKICAgIH0KICAgIGZvcihpPSgzKTtpPChOKTtpKyspewogICAgICBkcFtpXSA9bWF4X0woMCwgayAtIEFbaV0pK21pbl9MKG1pbl9MKGRwW2ktMV0sIGRwW2ktMl0pLCBkcFtpLTNdKTsKICAgIH0KICAgIHJldHVybiBtaW5fTChtaW5fTChkcFtOLTFdLCBkcFtOLTJdKSwgZHBbTi0zXSk7CiAgfQp9CjsKLy8gY0xheSB2ZXJzaW9uIDIwMjMxMDMxLTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgbGwgbWluSW5jcmVtZW50T3BlcmF0aW9ucyhWSSAmQSwgaW50IGspIHsKLy8gICAgIGludCBOID0gQS5zaXplKCk7Ci8vICAgICBzdGF0aWMgbGwgZHBbMWQ2XTsKLy8gICAgIHJlcChpLDMpIGRwW2ldID0gbWF4KDAsIGsgLSBBW2ldKTsKLy8gICAgIHJlcChpLDMsTikgZHBbaV0gPSBtYXgoMCwgayAtIEFbaV0pICsgbWluKGRwW2ktMV0sIGRwW2ktMl0sIGRwW2ktM10pOwovLyAgICAgcmV0dXJuIG1pbihkcFtOLTFdLCBkcFtOLTJdLCBkcFtOLTNdKTsKLy8gICB9Ci8vIH07Cg==