Skip to content

Commit f2048fd

Browse files
authored
Update 2054.Two-Best-Non-Overlapping-Events.cpp
1 parent ef99cfe commit f2048fd

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

Greedy/2054.Two-Best-Non-Overlapping-Events/2054.Two-Best-Non-Overlapping-Events.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,38 @@ class Solution {
33
{
44
return a[1] < b[1];
55
}
6+
67
public:
78
int maxTwoEvents(vector<vector<int>>& events)
89
{
910
int n = events.size();
1011
sort(events.begin(), events.end(), cmp);
1112

12-
vector<pair<int,int>>dp; // {time, value}
13-
dp.push_back({events[0][1], events[0][2]});
14-
int rollingMax = events[0][2];
15-
16-
int ret = events[0][2];
13+
vector<int>rollingMax(n);
14+
int m = 0;
15+
for (int i=0; i<n; i++)
16+
{
17+
m = max(m, events[i][2]);
18+
rollingMax[i] = m;
19+
}
20+
21+
vector<int>endTimes;
22+
int ret = 0;
1723

18-
for (int i=1; i<n; i++)
24+
for (int i=0; i<n; i++)
1925
{
2026
int a = events[i][0]-1, b = events[i][1], v = events[i][2];
27+
ret = max(ret, v);
2128

22-
int lastMax = 0;
23-
auto iter = upper_bound(dp.begin(), dp.end(), make_pair(a, INT_MAX));
24-
if (iter!=dp.begin())
29+
auto iter = upper_bound(endTimes.begin(), endTimes.end(), a);
30+
if (iter!=endTimes.begin())
2531
{
2632
iter = prev(iter);
27-
lastMax = iter->second;
28-
}
29-
ret = max(ret, lastMax + v);
33+
int idx = iter - endTimes.begin();
34+
ret = max(ret, rollingMax[idx] + v);
35+
}
3036

31-
rollingMax = max(rollingMax, v);
32-
dp.push_back({b, rollingMax});
37+
endTimes.push_back(b);
3338
}
3439

3540
return ret;

0 commit comments

Comments
 (0)