Esempio n. 1
0
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;
}