@@ -116,51 +116,50 @@ Because calculating $v(\lambda)$ and $c(\lambda)$ with the dynamic programming s
116
116
``` cpp
117
117
#include < bits/stdc++.h>
118
118
using namespace std ;
119
-
119
+
120
120
#define ll long long
121
121
122
122
const int MAX = 3e5 + 5 ;
123
123
124
- int n, k, A[MAX]; pair<ll, ll> dp[MAX][ 2 ];
125
-
126
- pair<ll, ll> better (pair< ll, ll > a, pair< ll, ll > b) {
127
- if ( a . first == b . first )
128
- return (a .second < b .second ? a : b );
124
+ int n, k, A[MAX];
125
+ pair<ll, ll> dp[MAX][ 2 ];
126
+
127
+ pair<ll, ll> better (pair< ll, ll > a, pair< ll, ll > b) {
128
+ if ( a . first == b . first ) return (a .second < b .second ? a : b );
129
129
130
- return (a .first > b .first ? a : b );
130
+ return (a .first > b .first ? a : b );
131
131
}
132
132
133
- bool solve(ll lmb){
134
- dp [0 ][0 ] = {0 , 0 };
135
- dp [0 ][1 ] = {-1e18 , 0 };
136
-
137
- for (int i = 1 ; i <= n ; i ++ ){
138
- dp[i ][0 ] = better(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
139
-
140
- dp[i ][1 ] = better(
141
- {dp[i - 1 ][0 ].first + A[i ] - lmb, dp[i - 1 ][0 ].second + 1},
142
- {dp[i - 1 ][1 ].first + A[i ], dp[i - 1 ][1 ].second}
143
- );
144
- }
145
- return better(dp[n ][0 ], dp[n ][1 ]).second <= k;
133
+ bool solve(ll lmb) {
134
+ dp [0 ][0 ] = {0 , 0 };
135
+ dp [0 ][1 ] = {-1e18 , 0 };
136
+
137
+ for (int i = 1 ; i <= n ; i ++ ) {
138
+ dp[i ][0 ] = better(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
139
+
140
+ dp[i ][1 ] =
141
+ better({dp[i - 1 ][0 ].first + A[i ] - lmb, dp[i - 1 ][0 ].second + 1},
142
+ {dp[i - 1 ][1 ].first + A[i ], dp[i - 1 ][1 ].second});
143
+ }
144
+ return better(dp[n ][0 ], dp[n ][1 ]).second <= k;
146
145
}
147
-
148
- int main(){
149
- ios_base::sync_with_stdio ; cin . tie ( 0 ) ;
150
- cin >> n >> k ;
151
-
152
- for ( int i = 1 ; i <= n ; i ++ )
153
- cin >> A [i ];
154
-
155
- ll L = 0 , H = 1e15 ;
156
-
157
- while (L < H ){
158
- ll M = (L + H ) / 2 ;
159
- solve (M ) ? H = M : L = M + 1 ;
160
- }
161
- solve(L );
162
-
163
- cout << better(dp [n ][0 ], dp [n ][1 ]).first + L * k << " \n " ;
146
+
147
+ int main() {
148
+ ios_base::sync_with_stdio ;
149
+ cin . tie ( 0 ) ;
150
+ cin >> n >> k ;
151
+
152
+ for ( int i = 1 ; i <= n ; i ++ ) cin >> A [i ];
153
+
154
+ ll L = 0 , H = 1e15 ;
155
+
156
+ while (L < H ) {
157
+ ll M = (L + H ) / 2 ;
158
+ solve (M ) ? H = M : L = M + 1 ;
159
+ }
160
+ solve(L );
161
+
162
+ cout << better(dp [n ][0 ], dp [n ][1 ]).first + L * k << " \n " ;
164
163
}
165
164
` ` `
166
165
## Problems
0 commit comments