@@ -120,38 +120,39 @@ using namespace std;
120
120
121
121
#define ll long long
122
122
123
- const int MAX = 300000 ;
124
123
const ll INF = (ll)300000 * 1000000000 ;
125
124
126
- int n, k, A[MAX + 1 ];
127
- pair<ll, ll> dp[MAX + 1 ][2 ];
128
-
129
- pair<ll, ll> solveLambda (ll lmb) {
130
- dp [0 ][0 ] = {0 , 0 };
131
- dp [0 ][1 ] = {-INF , 0 };
132
-
133
- for (int i = 1 ; i <= n ; i ++ ) {
134
- dp[i ][0 ] = max(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
135
-
136
- dp[i ][1 ] = max(
137
- make_pair(dp[i - 1 ][0 ].first + A[i ] - lmb, dp[i - 1 ][0 ].second + 1),
138
- make_pair(dp[i - 1 ][1 ].first + A[i ], dp[i - 1 ][1 ].second));
139
- }
140
- return max(dp[n ][0 ], dp[n ][1 ]);
141
- }
142
-
143
- int main() {
144
- cin >> n >> k;
145
-
146
- for (int i = 1; i <= n; i++) cin >> A[i ];
147
-
148
- ll lo = 0, hi = INF;
149
-
150
- while (lo < hi) {
151
- ll M = (lo + hi) / 2;
152
- solveLambda(M).second <= k ? hi = M : lo = M + 1 ;
153
- }
154
- cout << solveLambda (lo ).first + lo * k << endl ;
125
+ int main (){
126
+ int n, k;
127
+ cin >> n >> k;
128
+
129
+ int a[ n + 1] ;
130
+ for (int i = 1; i <= n; i++) cin >> a[ i] ;
131
+
132
+ auto solveLambda = [ &] (ll lmb){
133
+ pair < ll , ll > dp [n + 1 ][2 ];
134
+
135
+ dp [0 ][0 ] = {0 , 0 };
136
+ dp [0 ][1 ] = {-INF , 0 };
137
+
138
+ for (int i = 1 ; i <= n ; i ++ ){
139
+ dp[i ][0 ] = max(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
140
+
141
+ dp[i ][1 ] = max(
142
+ make_pair(dp[i - 1 ][0 ].first + a[i ] - lmb, dp[i - 1 ][0 ].second + 1),
143
+ make_pair(dp[i - 1 ][1 ].first + a[i ], dp[i - 1 ][1 ].second)
144
+ );
145
+ }
146
+ return max(dp[n ][0 ], dp[n ][1 ]);
147
+ };
148
+
149
+ ll lo = 0, hi = INF;
150
+
151
+ while (lo < hi){
152
+ ll mid = (lo + hi) / 2;
153
+ solveLambda(mid).second <= k ? hi = mid : lo = mid + 1 ;
154
+ }
155
+ cout << solveLambda (lo ).first + lo * k << endl ;
155
156
}
156
157
```
157
158
0 commit comments