@@ -3,33 +3,38 @@ class Solution {
33 {
44 return a[1 ] < b[1 ];
55 }
6+
67public:
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