@@ -120,42 +120,42 @@ using namespace std;
120
120
121
121
#define ll long long
122
122
123
- int main (){
124
- int n, k;
125
- cin >> n >> k;
126
-
127
- int a[ n] ;
128
- for (int &i : a) cin >> i;
129
-
130
- /*
131
- * Returns { maximum sum , subarrays used (max if ties )}
132
- * if creating a subarray penalizes the sum by "lmb" and
133
- * there is no limit to the number of subarrays you can create
134
- * /
135
- auto solveLambda = [ &] (ll lmb){
136
- pair < ll , ll > dp [n ][2 ];
137
-
138
- dp [0 ][0 ] = {0 , 0 };
139
- dp [0 ][1 ] = {a[0 ] - lmb, 1};
140
-
141
- for (int i = 1; i < n; i++){
142
- dp[i ][0 ] = max(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
143
-
144
- dp[i ][1 ] = max(
145
- make_pair(dp[i - 1 ][0 ].first + a[i ] - lmb, dp[ i - 1 ][ 0 ].second + 1),
146
- make_pair( dp[i - 1 ][1 ].first + a[ i ], dp[ i - 1 ][ 1 ].second)
147
- );
148
- }
149
- return max(dp[n - 1 ][0 ], dp[n - 1 ][1 ]);
150
- };
151
-
152
- ll lo = 0, hi = 1e18;
153
-
154
- while (lo < hi){
155
- ll mid = (lo + hi) / 2;
156
- solveLambda(mid).second <= k ? hi = mid : lo = mid + 1 ;
157
- }
158
- cout << solveLambda (lo ).first + lo * k << endl ;
123
+ int main () {
124
+ int n, k;
125
+ cin >> n >> k;
126
+
127
+ int a[ n] ;
128
+ for (int &i : a) cin >> i;
129
+
130
+ /*
131
+ * Returns { maximum sum , subarrays used (max if ties )}
132
+ * if creating a subarray penalizes the sum by "lmb" and
133
+ * there is no limit to the number of subarrays you can create
134
+ * /
135
+ auto solveLambda = [ &] (ll lmb) {
136
+ pair < ll , ll > dp [n ][2 ];
137
+
138
+ dp [0 ][0 ] = {0 , 0 };
139
+ dp [0 ][1 ] = {a[0 ] - lmb, 1};
140
+
141
+ for (int i = 1; i < n; i++) {
142
+ dp[i ][0 ] = max(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
143
+
144
+ dp[i ][1 ] =
145
+ max( make_pair(dp[i - 1 ][0 ].first + a[i ] - lmb,
146
+ dp[i - 1 ][0 ].second + 1),
147
+ make_pair(dp[ i - 1 ][ 1 ].first + a[ i ], dp[ i - 1 ][ 1 ].second) );
148
+ }
149
+ return max(dp[n - 1 ][0 ], dp[n - 1 ][1 ]);
150
+ };
151
+
152
+ ll lo = 0, hi = 1e18;
153
+
154
+ while (lo < hi) {
155
+ ll mid = (lo + hi) / 2;
156
+ solveLambda(mid).second <= k ? hi = mid : lo = mid + 1 ;
157
+ }
158
+ cout << solveLambda (lo ).first + lo * k << endl ;
159
159
}
160
160
```
161
161
0 commit comments