Week 3
3月7日
题目描述
农夫约翰有 N N N 个农场,编号为 1 1 1 到 N N N。
已知农夫约翰会在时刻 c i c_i ci 关闭农场 i i i。
贝茜在时刻 S S S 起床,她希望在农场关闭前访问尽可能多的农场,从而最大限度地提高她这一天的生产力。
她计划在时刻 t i + S t_i+S ti+S 访问农场 i i i。
贝茜必须于严格早于农夫约翰关闭农场的时刻抵达农场才能成功进行访问。
贝茜有 Q Q Q 个询问。
对于每个询问,她会给你两个整数 S S S 和 V V V。
对于每个询问,输出当贝茜在时刻 S S S 起床是否可以访问至少 V V V 个农场。
输入格式
输入的第一行包含 N N N 和 Q Q Q。
第二行包含 c 1 , c 2 , … , c N c_1,c_2,…,c_N c1,c2,…,cN。
第三行包含 t 1 , t 2 , … , t N t_1,t_2,…,t_N t1,t2,…,tN。
以下 Q Q Q 行,每行包含两个整数 V V V 和 S S S。
输出格式
对
Q
Q
Q 个询问的每一个输出一行,输出 YES
(是)或 NO
(否)。
数据范围
1
≤
N
≤
2
×
1
0
5
1 \le N \le 2 \times 10^5
1≤N≤2×105,
1
≤
Q
≤
2
×
1
0
5
1 \le Q \le 2 \times 10^5
1≤Q≤2×105,
1
≤
c
i
≤
1
0
6
1 \le c_i \le 10^6
1≤ci≤106,
1
≤
t
i
≤
1
0
6
1 \le t_i \le 10^6
1≤ti≤106,
1
≤
V
≤
N
1 \le V \le N
1≤V≤N,
1
≤
S
≤
1
0
6
1 \le S \le 10^6
1≤S≤106
输入样例:
5 5
3 5 7 9 12
4 2 3 3 8
1 5
1 6
3 3
4 2
5 1
输出样例:
YES
NO
YES
YES
NO
样例解释
对于第一个询问,贝茜将在时间 t = [ 9 , 7 , 8 , 8 , 13 ] t=[9,7,8,8,13] t=[9,7,8,8,13] 访问农场, 因此她在农夫约翰关闭农场之前能准时访问到的只有农场 4 4 4。
对于第二个询问,贝茜将无法准时访问到任何农场。
对于第三个询问,贝茜将可以准时访问到农场 3 , 4 , 5 3,4,5 3,4,5。
对于第四个和第五个询问,贝茜将能够准时访问除第一个农场之外的所有农场。
排序 + 二分查找
AC _code
from bisect import bisect_right
n, q = map(int, input().split())
c = list(map(int, input().split()))
t = list(map(int, input().split()))
arr = [c[i] - t[i] for i in range(n)]
arr.sort()
for _ in range(q):
v, s = map(int, input().split())
idx = bisect_right(arr, s)
res = n - idx
if v <= res:
print('YES')
else:
print('NO')
END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢