Skip to content

Commit 804fdb6

Browse files
authored
Update Lagrange.mdx
1 parent 3c11658 commit 804fdb6

File tree

1 file changed

+31
-30
lines changed

1 file changed

+31
-30
lines changed

content/6_Advanced/Lagrange.mdx

+31-30
Original file line numberDiff line numberDiff line change
@@ -120,38 +120,39 @@ using namespace std;
120120

121121
#define ll long long
122122

123-
const int MAX = 300000;
124123
const ll INF = (ll)300000 * 1000000000;
125124

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;
155156
}
156157
```
157158

0 commit comments

Comments
 (0)