Skip to content

Commit 3d5b620

Browse files
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
1 parent d1afc54 commit 3d5b620

File tree

1 file changed

+37
-37
lines changed

1 file changed

+37
-37
lines changed

content/6_Advanced/Lagrange.mdx

+37-37
Original file line numberDiff line numberDiff line change
@@ -121,43 +121,43 @@ using namespace std;
121121
#define ll long long
122122

123123
int main() {
124-
int n, k;
125-
cin >> n >> k;
126-
127-
int a[n];
128-
for (int &i : a) { cin >> i; }
129-
130-
/*
131-
* Returns {maximum sum, subarrays used (max if ties)}
132-
* if creating a subarray penalizes the sum by "lmb" and
133-
* there is no limit to the number of subarrays you can create
134-
*/
135-
auto solve_lambda = [&](ll lmb) {
136-
pair<ll, ll> dp[n][2];
137-
138-
dp[0][0] = {0, 0};
139-
dp[0][1] = {a[0] - lmb, 1};
140-
141-
for (int i = 1; i < n; i++){
142-
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
143-
144-
dp[i][1] = max(
145-
make_pair(dp[i - 1][0].first + a[i] - lmb, dp[i - 1][0].second + 1),
146-
make_pair(dp[i - 1][1].first + a[i], dp[i - 1][1].second)
147-
);
148-
}
149-
150-
return max(dp[n - 1][0], dp[n - 1][1]);
151-
};
152-
153-
ll lo = 0;
154-
ll hi = 1e18;
155-
while (lo < hi) {
156-
ll mid = (lo + hi) / 2;
157-
solve_lambda(mid).second <= k ? hi = mid : lo = mid + 1;
158-
}
159-
160-
cout << solve_lambda(lo).first + lo * k << endl;
124+
int n, k;
125+
cin >> n >> k;
126+
127+
int a[n];
128+
for (int &i : a) { cin >> i; }
129+
130+
/*
131+
* Returns {maximum sum, subarrays used (max if ties)}
132+
* if creating a subarray penalizes the sum by "lmb" and
133+
* there is no limit to the number of subarrays you can create
134+
*/
135+
auto solve_lambda = [&](ll lmb) {
136+
pair<ll, ll> dp[n][2];
137+
138+
dp[0][0] = {0, 0};
139+
dp[0][1] = {a[0] - lmb, 1};
140+
141+
for (int i = 1; i < n; i++) {
142+
dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
143+
144+
dp[i][1] =
145+
max(make_pair(dp[i - 1][0].first + a[i] - lmb,
146+
dp[i - 1][0].second + 1),
147+
make_pair(dp[i - 1][1].first + a[i], dp[i - 1][1].second));
148+
}
149+
150+
return max(dp[n - 1][0], dp[n - 1][1]);
151+
};
152+
153+
ll lo = 0;
154+
ll hi = 1e18;
155+
while (lo < hi) {
156+
ll mid = (lo + hi) / 2;
157+
solve_lambda(mid).second <= k ? hi = mid : lo = mid + 1;
158+
}
159+
160+
cout << solve_lambda(lo).first + lo * k << endl;
161161
}
162162
```
163163

0 commit comments

Comments
 (0)