Skip to content

Commit bb57dab

Browse files
authored
Update 2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps_v2.cpp
1 parent fd4206c commit bb57dab

File tree

1 file changed

+16
-17
lines changed

1 file changed

+16
-17
lines changed

Binary_Search/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps_v2.cpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,24 @@ class Solution {
1212
}
1313

1414
int ret = 0;
15-
for (int i=0; i<n; i++)
15+
int mid = lower_bound(pos.begin(), pos.end(), startPos) - pos.begin();
16+
for (int i=mid; i<n; i++)
1617
{
17-
if (pos[i]<=startPos)
18-
{
19-
double d = k - (startPos-pos[i]);
20-
if (d<0) continue;
21-
int j = upper_bound(pos.begin(), pos.end(), startPos+d/2) - pos.begin() - 1;
22-
if (j>=0 && j<n)
23-
ret = max(ret, presum[j] - (i==0?0:presum[i-1]));
24-
}
25-
else
26-
{
27-
double d = k - (pos[i]-startPos);
28-
if (d<0) continue;
29-
int j = lower_bound(pos.begin(), pos.end(), startPos-d/2) - pos.begin();
30-
if (j>=0 && j<n)
31-
ret = max(ret, presum[i]- (j==0?0:presum[j-1]));
32-
}
18+
if (pos[i] - startPos > k) break;
19+
double d = (k-(pos[i]-startPos))/2;
20+
int j = lower_bound(pos.begin(), pos.end(), startPos-d) - pos.begin();
21+
if (j>=0 && j<n) ret = max(ret, presum[i] - (j==0?0:presum[j-1]));
22+
}
23+
24+
mid = upper_bound(pos.begin(), pos.end(), startPos) - pos.begin()-1;
25+
for (int i=mid; i>=0; i--)
26+
{
27+
if (startPos - pos[i] > k) break;
28+
double d = (k-(startPos-pos[i]))/2;
29+
int j = upper_bound(pos.begin(), pos.end(), startPos+d) - pos.begin() - 1;
30+
if (j>=0 && j<n) ret = max(ret, presum[j] - (i==0?0:presum[i-1]));
3331
}
32+
3433
return ret;
3534
}
3635
};

0 commit comments

Comments
 (0)