@@ -116,52 +116,51 @@ 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
- #define pll pair<ll, ll >
122
- #define f first
123
- #define s second
124
121
125
122
const int MAX = 3e5 + 5 ;
126
123
127
- int n, k, A[MAX];
128
- pll dp[MAX][ 2 ];
129
-
130
- pll better (pll a, pll b) {
131
- if ( a . f == b . f ) return (a .s < b .s ? a : b );
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 );
132
129
133
- return (a .f > b .f ? a : b );
130
+ return (a .first > b .first ? a : b );
134
131
}
135
132
136
- bool solve(ll lmb) {
137
- dp [0 ][0 ] = {0 , 0 };
138
- dp [0 ][1 ] = {-1e18 , 0 };
139
-
140
- for (int i = 1 ; i <= n ; i ++ ) {
141
- dp[i ][0 ] = better(dp[i - 1 ][0 ], dp[i - 1 ][1 ]);
142
-
143
- dp[i ][1 ] = better({dp[i - 1 ][0 ].f + A[i ] - lmb, dp[i - 1 ][0 ].s + 1},
144
- {dp[i - 1 ][1 ].f + A[i ], dp[i - 1 ][1 ].s});
145
- }
146
- return better(dp[n ][0 ], dp[n ][1 ]).s <= 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 ] = 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;
147
146
}
148
-
149
- int main() {
150
- ios_base::sync_with_stdio ;
151
- cin . tie ( 0 ) ;
152
- cin >> n >> k ;
153
-
154
- for ( int i = 1 ; i <= n ; i ++ ) cin >> A [i ];
155
-
156
- ll L = 0 , H = 1e15 ;
157
-
158
- while (L < H ) {
159
- ll M = (L + H ) / 2 ;
160
- solve (M ) ? H = M : L = M + 1 ;
161
- }
162
- solve(L );
163
-
164
- cout << better(dp [n ][0 ], dp [n ][1 ]).f + L * k << " \n " ;
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 " ;
165
164
}
166
165
` ` `
167
166
## Problems
0 commit comments