from bisect import * import sys input = lambda: sys.stdin.readline().strip() n, m = map(int, input().split()) nums = list(map(int, input().split())) Q = list(map(int, input().split()))
s = set(nums) # nums 构成的集合,如果待查询数组 q not in s,直接返回-1 for q in Q: if q notin s: print(-1, end = " ") else: # q 一定出现在 nums 中, 利用技巧将“大于等于 x”转化成“大于 x-1” print(bisect(nums, q - 1) + 1, end = " ")
# 但是你要直接写: # for q in Q: # if q not in nums: # …… # 就会报错,TLE,要先s = set(nums),转换成集合 # 因为使用 if q not in nums: 来判断元素是否在列表 nums 中。列表的 in 操作符需要遍历整个列表,其时间复杂度为O(n) # 而集合在 Python 中是基于哈希表实现的,其查找元素的时间复杂度为 O(1)(平均情况下)。这意味着无论集合的大小如何,查找元素所需的时间基本保持不变。
defcheck(a): num = 0# 记录分成长度为 a 的巧克力数量 for i inrange(n): num += (w[i] // a) * (h[i] // a) # 每一大块可以分成的边长为 a 的巧克力数量 if num >= k: returnTrue# 大于要求数量,返回真 returnFalse
n, k = map(int, input().split()) for i inrange(n): h[i], w[i] = map(int, input().split())
l, r = 1, 100000 while l < r: mid = (l + r) // 2 if check(mid): l = mid + 1 else: r = mid
defcheck(a): num = 0# 记录分成长度为 a 的巧克力数量 for h, w in c: num += (h // a) * (w // a) # 每一大块可以分成的边长为 a 的巧克力数量 if num >= k: returnTrue# 大于要求数量,返回真 returnFalse
n, k = map(int, input().split()) ##for i in range(n): ## h[i], w[i] = map(int, input().split())
c = [list(map(int, input().split())) for _ inrange(n)]
l, r = 1, 100000 while l < r: mid = (l + r) // 2 if check(mid): l = mid + 1 else: r = mid