@@ -4,61 +4,33 @@ class Solution {
4
4
{
5
5
int n = fruits.size ();
6
6
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
- }
13
7
vector<int >presum (n);
14
- int cur = 0 ;
15
8
for (int i=0 ; i<n; i++)
16
9
{
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 ] ;
19
12
}
20
-
13
+
21
14
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-- )
25
18
{
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 ]));
31
23
}
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++ )
36
28
{
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 ]));
60
33
}
61
- ret = max (ret, sum);
62
34
63
35
return ret;
64
36
}
0 commit comments