Код работает дольше, чем нужно (python)
я написала код по следующей задаче:
Требуется определить в заданном массиве количество элементов,
равных искомому числу.
Входные данные
В первой строке вводится одно натуральное число N, не превосходящее 105:
количество чисел в массиве.
Во второй строке вводятся N натуральных чисел, не превосходящих 109,
каждое следующее не меньше предыдущего.
В третьей строке вводится количество искомых чисел
M - натуральное число, не превосходящее 106.
В четвертой строке вводится M натуральных чисел, не
превосходящих 109.
Выходные данные
Для каждого запроса выведите в отдельной строке одно число:
количество элементов массива, равных числу-запросу. Элементы
массива нумеруются с единицы.
Если в массиве нет такого числа, выведите 0.
Примеры
входные данные
4
1 2 2 4
4
1 4 3 2
выходные данные
1
1
0
2
Мой код:
def l_binar(a, x):
l=0
r=len(a)-1
ans=-1
while l<=r:
m=(l+r)//2
if a[m]==x:
ans=m
r=m-1
elif a[m]<x:
l=m+1
else:
r=m-1
return ans
#
def r_binar(a, x):
l=0
r=len(a)-1
ans=-1
while l<=r:
m=(l+r)//2
if a[m]==x:
ans=m
l=m+1
elif a[m]<x:
l=m+1
else:
r=m-1
return ans
###
n=int(input())
a=list(map(int, input().split()))
m=int(input())
b=list(map(int, input().split()))
for i in range(m):
if l_binar(sorted(a), b[i])+1!=0 and r_binar(sorted(a), b[i])+1!=0:
print(r_binar(sorted(a), b[i])+1-l_binar(sorted(a), b[i]))
else:
print(0)
Он работает верно, но слишком долго, на 2 последних тестах проверяющей системы (эти тесты неизвестны) она превышает лимит по времени. Помогите пожалуйста её ускорить!
Источник: Stack Overflow на русском