bool isValid(long long g) { // cout << "G: " << g << endl; MaxQueue Q; long long l = max(d - g, 1ll), r = d + g; queue<State> wait; wait.push(State{0ll, 0ll}); long long best = 0; for (State p: points) { // cout << "===" << i << endl; long long L = p.x - r, R = p.x - l; while (wait.size() != 0 && wait.front().x <= R) { Q.push(wait.front()); wait.pop(); } while (Q.size() != 0 && Q.front().x < L) Q.pop(); if (Q.size() != 0) { // cout << "Push: " << Q.max() + p.s << endl; wait.push(State{p.x, Q.max() + p.s}); best = max(best, Q.max() + p.s); } } return best >= k; }