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
N, A, B = map(int, input().split()) sN = str(N) res = 0
defdfs(i, n, a, b): global res if i == len(sN): res = max(res, n) return x = int(sN[i]) # 对于第i位,只有两种选择,执行a操作,或执行b操作 # 对于执行a操作,计算当前数字可以进行加 1 操作的最大次数d, # 取9 - x(将当前数字加到 9 所需的次数)和剩余的操作 1 次数a中的较小值 d = min(9 - x, a) dfs(i + 1, n * 10 + (x + d), a - d, b)
# 例如,x=1,b=3,这时就能执行操作b,把x变成9 if b >= x + 1: dfs(i + 1, n * 10 + 9, a, b - (x + 1))
for i inrange(1, 100000000): c = len(str(i)) if c % 2 == 0: k = c // 2# 中间位置 cnt = list(map(int, list(str(i)))) ifsum(cnt[:k]) == sum(cnt[k:]): ans = ans + 1
defcheck(n, mod): x = n ans = 0 # x % mod:计算 x 在 mod 进制下的最低位数字,然后将其累加到 ans 中。 # x //= mod:将 x 除以 mod 并取整,相当于将 x 在 mod 进制下右移一位,去掉最低位数字。 # 这个 while 循环会一直执行,直到 x 变为 0,此时 ans 中存储的就是 n 在 mod 进制下各位数字之和。 while x > 0: ans += x % mod x //= mod return n % ans == 0
cnt = 0 i = 1
whileTrue: if check(i,2) and check(i,8) and check(i,10) and check(i,16): cnt = cnt + 1 if cnt == 2023: # print(i) break i = i + 1