@@ -4,61 +4,33 @@ class Solution {
44 {
55 int n = fruits.size ();
66 vector<int >pos (n);
7- vector<int >val (n);
8- for (int i=0 ; i<n; i++)
9- {
10- pos[i] = fruits[i][0 ];
11- val[i] = fruits[i][1 ];
12- }
137 vector<int >presum (n);
14- int cur = 0 ;
158 for (int i=0 ; i<n; i++)
169 {
17- cur += val[i ];
18- presum[i] = cur ;
10+ pos[i] = fruits[i][ 0 ];
11+ presum[i] = (i== 0 ? 0 :presum[i- 1 ]) + fruits[i][ 1 ] ;
1912 }
20-
13+
2114 int ret = 0 ;
22- int j = 0 ;
23- while (j<n && pos[j]<startPos) j++;
24- for (int i=0 ; i<n && pos[i]<=startPos ; i++ )
15+ int mid = upper_bound (pos. begin (), pos. end (), startPos) - pos. begin () ;
16+ int j = n- 1 ;
17+ for (int i=mid- 1 ; i>= 0 ; i-- )
2518 {
26- while (j<n && (startPos-pos[i]+(pos[j]-startPos)*2 ) <= k)
27- {
28- ret = max (ret, presum[j] - (i==0 ? 0 :presum[i-1 ]));
29- j++;
30- }
19+ while (pos[j]>=startPos && startPos-pos[i]+(pos[j]-startPos)*2 > k)
20+ j--;
21+ if (pos[j]>=startPos) ret = max (ret, presum[j] - (i==0 ?0 :presum[i-1 ]));
22+ else if (startPos-pos[i] <= k) ret = max (ret, presum[j] - (i==0 ?0 :presum[i-1 ]));
3123 }
32-
33- j = n- 1 ;
34- while (j>= 0 && pos[j]>startPos) j--;
35- for (int i=n- 1 ; i>= 0 && pos[i]>=startPos ; i-- )
24+
25+ mid = lower_bound (pos. begin (), pos. end (), startPos) - pos. begin () ;
26+ j = 0 ;
27+ for (int i=mid ; i<n ; i++ )
3628 {
37- while (j>=0 && (pos[i]-startPos+(startPos-pos[j])*2 <=k))
38- {
39-
40- ret = max (ret, presum[i] - (j==0 ?0 :presum[j-1 ]));
41- j--;
42- }
43- }
44-
45- int i = upper_bound (pos.begin (), pos.end (), startPos) - pos.begin ()-1 ;
46- int sum = 0 ;
47- while (i>=0 && startPos-pos[i]<=k)
48- {
49- sum += val[i];
50- i--;
51- }
52- ret = max (ret, sum);
53-
54- i = lower_bound (pos.begin (), pos.end (), startPos) - pos.begin ();
55- sum = 0 ;
56- while (i<n && pos[i]-startPos<=k)
57- {
58- sum += val[i];
59- i++;
29+ while (pos[j]<=startPos && pos[i]-startPos+(startPos-pos[j])*2 > k)
30+ j++;
31+ if (pos[j]<=startPos) ret = max (ret, presum[i] - (j==0 ?0 :presum[j-1 ]));
32+ else if (pos[i]-startPos <= k) ret = max (ret, presum[i] - (j==0 ?0 :presum[j-1 ]));
6033 }
61- ret = max (ret, sum);
6234
6335 return ret;
6436 }
0 commit comments