Expedition 2431

fn main() {
   let mut N = 4; // gas station num
   let P = 10; // initial gas
   let L = 25; // distance

   let mut A: Vec<i32> = vec![10, 14, 20, 21]; // gas station distance
   let mut B: Vec<i32> = vec![10, 5, 2, 4]; // gas volume supply

   A.push(L);
   B.push(0);
   N += 1;

   let que; // manage gas station

   let mut ans = 0; // num of gas supply
   let mut pos = 0; // position
   let mut tank = P; // gas volume

   for i in 0..N {
      let d = A[i] - pos; // distance

      while (tank - d < 0) {
         if que.empty() {
            que.push(-1);
            return;
         }
         tank += que.top();
         que.pop();
         ans += 1;
      }

      tank -= d;
      pos = A[i];
      que.push(B[i]);
   }
   println!("{}", ans);
}

priority queはstackで大きい順に値を入れていく。