#include #include using namespace std ; using ll = long long ; int n, k ; constexpr ll BAD = -1000000000000000000LL ; ll tri(ll v) { return v * (v - 1) / 2 ; } int main() { cin >> n >> k ; vector v(n) ; v = vector(n) ; vector cnts(k+1) ; vector > cnts2 ; ll r{}, missing{} ; for (int i=0; i> v[i] ; if (v[i] > 0) { for (int j=0; j best(missing+1) ; vector nbest(missing+1) ; vector icnt(missing+1) ; for (int i=1; i<=missing; i++) best[i] = BAD ; for (int i=k; i>=1; i--) { int totnonz{} ; ll sinv{} ; for (int j=0; j bestv) { bestv = t ; curk = k ; curleftnonz = leftnonz ; } leftnonz++ ; } totnonz++ ; nbest[totnonz] = max(best[totnonz], bestv) ; } swap(best, nbest) ; } cout << r + tri(missing) + best[missing] << endl ; }