Skip to content

Commit 4a75af8

Browse files
authored
Update Lagrange.mdx
1 parent db701f1 commit 4a75af8

File tree

1 file changed

+37
-38
lines changed

1 file changed

+37
-38
lines changed

content/6_Advanced/Lagrange.mdx

+37-38
Original file line numberDiff line numberDiff line change
@@ -116,52 +116,51 @@ Because calculating $v(\lambda)$ and $c(\lambda)$ with the dynamic programming s
116116
```cpp
117117
#include <bits/stdc++.h>
118118
using namespace std;
119-
119+
120120
#define ll long long
121-
#define pll pair<ll, ll>
122-
#define f first
123-
#define s second
124121

125122
const int MAX = 3e5 + 5;
126123

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);
132129

133-
return (a.f > b.f ? a : b);
130+
return (a.first > b.first ? a : b);
134131
}
135132

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;
147146
}
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";
165164
}
166165
```
167166
## Problems

0 commit comments

Comments
 (0)