@@ -8,18 +8,15 @@ class Solution {
8
8
[](const auto & a, const auto & b) {
9
9
return a[1 ] < b[1 ];
10
10
});
11
- vector<int > prv (size (events));
12
- for (int i = 0 ; i < size (events); ++i) {
13
- prv[i] = distance (cbegin (events),
14
- prev (lower_bound (cbegin (events), cend (events), events[i],
15
- [](const auto & a, const auto & b) {
16
- return a[1 ] < b[0 ];
17
- })));
18
- }
19
11
vector<vector<int >> dp (size (events) + 1 , vector<int >(k + 1 ));
20
12
for (int i = 1 ; i <= size (events); ++i) {
13
+ auto prev_i_1 = distance (cbegin (events),
14
+ prev (lower_bound (cbegin (events), cend (events), events[i - 1 ],
15
+ [](const auto & a, const auto & b) {
16
+ return a[1 ] < b[0 ];
17
+ })));
21
18
for (int j = 1 ; j <= k; ++j) {
22
- dp[i][j] = max (dp[i - 1 ][j], dp[prv[i - 1 ] + 1 ][j - 1 ] + events[i - 1 ][2 ]);
19
+ dp[i][j] = max (dp[i - 1 ][j], dp[prev_i_1 + 1 ][j - 1 ] + events[i - 1 ][2 ]);
23
20
}
24
21
}
25
22
return dp[size (events)][k];
@@ -32,18 +29,15 @@ class Solution2 {
32
29
public:
33
30
int maxValue (vector<vector<int >>& events, int k) {
34
31
sort (begin (events), end (events));
35
- vector<int > nxt (size (events));
36
- for (int i = 0 ; i < size (events); ++i) {
37
- nxt[i] = distance (cbegin (events),
38
- prev (upper_bound (cbegin (events), cend (events), events[i],
39
- [](const auto & a, const auto & b) {
40
- return a[1 ] < b[0 ];
41
- })));
42
- }
43
32
vector<vector<int >> dp (size (events) + 1 , vector<int >(k + 1 ));
44
33
for (int i = size (events) - 1 ; i >= 0 ; --i) {
34
+ auto next_i = distance (cbegin (events),
35
+ prev (upper_bound (cbegin (events), cend (events), events[i],
36
+ [](const auto & a, const auto & b) {
37
+ return a[1 ] < b[0 ];
38
+ })));
45
39
for (int j = 1 ; j <= k; ++j) {
46
- dp[i][j] = max (dp[i + 1 ][j], dp[nxt[i] + 1 ][j - 1 ] + events[i][2 ]);
40
+ dp[i][j] = max (dp[i + 1 ][j], dp[next_i + 1 ][j - 1 ] + events[i][2 ]);
47
41
}
48
42
}
49
43
return dp[0 ][k];
0 commit comments