public class Solution { public int[] SuccessfulPairs(int[] spells, int[] potions, long success) { int getSuccessful(long strength) { var (left, right) = (0, potions.Length); while (left < right) { var mid = (left + right) / 2; if (strength * potions[mid] >= success) { right = mid; } else { left = mid + 1; } } return potions.Length - left; } // Ensort potions to allow bisection. Array.Sort(potions); return spells .Select(s => getSuccessful(s)) .ToArray(); } }