def main():
    lhs = prefetch()
    for _ in range(int(input())):
        n = int(input().strip())
        ind = bs(lhs, n)
        for i in range(ind, -1, -1):
            if (n % lhs[i] == 0):
                print(n // lhs[i])
                break
Esempio n. 2
0
 def remap(self):
     print("Remapping positions to path {}".format(self.filename))
     rawpositions = []
     [rawpositions.append(x.dfromstart) for x in self.points]
     betweenwho = []
     [
         betweenwho.append(bs(rawpositions, y.dfromstart))
         for y in self.interpoints
     ]
     print(betweenwho)
Esempio n. 3
0
def findNext(n):
    #print(534976,536479)
    sn = list(map(int,str(n)))[::-1]
    #print(sn)
    for i in range(len(str(sn))-1):
        
        if not sn[i]<sn[1+i]:
            nl = sn[:i+1] ; p = sn[i+1]
            #print(nl,p)
                        
            q,nl[bs(nl,p)] = nl[bs(nl,p)],p 
            nl.append(q) 
            #print(nl)
            
            nl[:-1] = sorted(nl[:-1],reverse=1) #for further optimization, here also we may use bs as the list is already sorted
            #print(nl)
                     
            gl = nl + sn[i+2:] 
            return ''.join(list(map(str,gl))[::-1])
    return -1 
Esempio n. 4
0
def solve_z():
    Z = 0
    nb, kb = NB[:], KB[:]
    for n in nb[::-1]:
        i = bs(kb, n)
        if i < len(kb):
            kb.pop(i)
        else:
            kb.pop(0)
            Z += 1
    return Z
Esempio n. 5
0
 def advantageCount(self, A, B):
     A.sort()
     r = []
     for n in B[:-1]:
         i = bs(A, n)
         if i == len(A):
             r.append(A.pop(0))
         else:
             r.append(A.pop(i))
     r.append(A[0])
     return r
Esempio n. 6
0
def note2Id(note):
    '''
    input: ONE note with features
    output: note id
  '''
    if (0 < note[id['duration']] <= config.note.duration[-1]
            and min_pitch <= note[id['pitch']] <= max_pitch
            and not 0 < note[id['time']] < config.note.time[1]):
        note = tuple(d[bs(d, n) - 1] for n, d in zip(note, config.note.divs))
        return config.note.note2id[note]
    else:
        return None
Esempio n. 7
0
def binsrch(arr, x):
    if (len(arr) == 0):
        return 0
    k = bs(arr, x)
    if (x > arr[-1]):
        tmp = arr[-1]
        arr.pop(-1)
        return [arr, tmp]
    if (arr[k] == x):
        arr.pop(k)
        return [arr, x]
    if (k == 0):
        return [arr, 0]
    else:
        tmp = arr[k - 1]
        arr.pop(k - 1)
        return [arr, tmp]
Esempio n. 8
0
    def _show_progress(last_known_progress, end_event, queue):
        progress_values = [i for i in range(0, 110, 10)]  # [0, 10, ..., 100]
        chars = '|/-\\'
        msg = None
        while True:
            if not queue.full():
                # nothing in the queue yet, keep showing the last known progres
                progress = last_known_progress
            else:
                update = queue.get()
                # figure out what kind of update is being requested
                if update[0] == CmdProgressBarUpdateTypes.UPDATE_PROGRESS:
                    progress = update[1]
                    last_known_progress = progress
                else:
                    msg = update[1]
                # signal that the value has been consumed
                queue.task_done()

            num_progress_vals = bs(progress_values, progress)
            progress_info = '..'.join([''.join((str(i), '%')) for i in progress_values[:num_progress_vals]])
            progress_info = ''.join((progress_info, '.' * (53 - len(progress_info))))

            # for info msg updates, display the message
            if msg != None:
                sys.stdout.write(''.join(('\r', ' ' * 70, '\r')))
                sys.stdout.write(''.join((msg, '\n')))
                msg = None

            # show pogress
            for c in chars:
                sys.stdout.write('\r[ {0} ..{1}.. ]'.format(c, progress_info))
                sys.stdout.flush()
                time.sleep(0.4)

            if end_event.is_set():
                break
Esempio n. 9
0
from sys import stdin
input = stdin.readline
from bisect import bisect_left as bs

n, m = map(int, input().split())
seq = [int(input()) for i in range(n)] + [float('inf')]
seq.sort()
M = float('inf')
for idx in range(n):
    i = seq[idx]
    j = seq[bs(seq, i + m)]
    M = min(M, j - i)
print(M)
Esempio n. 10
0
    tmp += a[i]
    sumA.append(tmp)
# print(sumA)


def bin_search(left, right, v):

    mid = (left + right) >> 1
    if left > right:
        return left
    if sumA[mid] == v:
        return mid + 1
    elif sumA[mid] < v:
        return bin_search(mid + 1, right, v)
    else:
        return bin_search(left, mid - 1, v)


now = 0

ansList = []

for i in range(q):
    now += k[i]
    ans_id = bs(sumA, now)
    if ans_id == n:
        now = 0
        ans_id = 0
    ansList.append(n - ans_id)

print("\n".join(map(str, ansList)))
 starts = []
 ends = []
 for i in range(n):
     starts.append(time[i][0])
     ends.append(time[i][1])
 for i in range(m):
     p = int(input())
     #print(p,end=" ")
     if (p >= ends[-1]):
         print(-1)
     elif (p >= starts[-1] and p < ends[-1]):
         print(0)
     elif (p >= starts[0] and p < ends[0]):
         print(0)
     else:
         entry = bs(starts, p)
         exit = bs(ends, p)
         if (entry == 0):
             print(starts[0] - p)
             continue
         if (p == ends[exit]):
             exit += 1
         if (starts[entry] > p and ends[entry - 1] > p):
             entry -= 1
         if (starts[entry] > p and ends[entry - 1] <= p and ends[exit] > p):
             print(starts[entry] - p)
             continue
         if (entry == exit):
             print(0)
         elif (entry < exit):
             print(starts[exit] - p)
Esempio n. 12
0
from bisect import bisect_right as bs

ls = [0, 1, 3]
while ls[-1] < 2e9:
    ls.append(ls[-1] + bs(ls, len(ls) - 1))
for _ in range(int(input())):
    print(bs(ls, int(input()) - 1))
Esempio n. 13
0
    Z = int(input())
    # i = 0
    # while i < len(products):
    #     if products[i] > Z:
    #         i -= 1
    #         break
    #     i += 1
    # print(f"Case #{t}:", products[i])

    # print(f"Case #{t}:", products[bs(products, Z)-1])

    # lo, up = 0, len(primes)-1
    # while lo < up:
    #     y = (lo+up)//2
    #     if primes[y]*primes[y+1] > Z: up = y
    #     else: lo = y+1
    # print(f"Case #{t}:", primes[lo-1]*primes[lo])

    idx = bs(primes, int(Z**0.5))
    # print(Z, Z**0.5, idx)
    # print("checking", idx, "which is", primes[idx])
    while idx >= 0:
        if idx == len(primes) - 1:
            idx -= 1
        elif primes[idx] * primes[idx + 1] > Z:
            idx -= 1
        else:
            print(f"Case #{t}:", primes[idx] * primes[idx + 1])
            break
    else:
        print(f"Case #{t}: 2")
Esempio n. 14
0
from bisect import bisect as bs
K = int(input())

dp = [1, 2]
# dp[i] = 2의 거듭 제곱이 되는 i번째 수가 몇번 째에 나오는가

ans = 0
# 출력 할 2진수 형태의 값

while dp[-1]+dp[-2] <= K:
    dp.append(dp[-1]+dp[-2])
# K보다 작은 2의 거듭 제곱 꼴을 모두 찾는다.


while K:
    i = bs(dp, K)-1
    # K가 DP의 몇번째 원소에 들어갈 수 있을 지 찾아서 i에 저장

    ans += 10**i
    # K 보다 작은 가장 큰 2의 거듭제곱을 만드는데 걸리는 횟수를 K에서 제거한다
    # 1 << i == 10**n
    K -= dp[i]

print(ans)


# # import sys
# # input = sys.stdin.readline

# # k = int(input())
# # if k == 1: print(1)
Esempio n. 15
0
from bisect import bisect as bs
from itertools import accumulate as ac
rd = lambda: map(int, input().split())
n, q = rd()
A, k = rd(), rd()
a = list(ac(A))
d = 0
for i in range(q):
    d += next(k)
    j = bs(a, d)
    if j == n:
        d = 0
        j = 0
    print(n - j)
Esempio n. 16
0
from bisect import bisect_left as bs
n, m = map(int, input().split())
x, y = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
time = 0
cnt = 0
while True:
    ai = bs(a, time)
    if ai == n:
        break
    time = a[ai] + x
    bi = bs(b, time)
    if bi == m:
        break
    time = b[bi] + y
    cnt += 1
print(cnt)
Esempio n. 17
0
from bisect import bisect_left as bs

rd = lambda: map(int, input().split())
n, k = rd()
r = list(rd())
a = sorted(r)
d = [0] * n
for _ in range(k):
    x, y = rd()
    x -= 1
    y -= 1
    p = r[x] - r[y]
    if p < 0:
        d[y] += 1
    if p > 0:
        d[x] += 1
print(*map(lambda x: bs(a, r[x]) - d[x], range(n)))
Esempio n. 18
0
'''
Author: Amitrajit Bose
Passes TC: Only Last
'''
from bisect import bisect_left as bs
n, m = [int(x) for x in input().strip().split()]
a = [int(x) for x in input().strip().split()]
b = [int(x) for x in input().strip().split()]
arr = []
for i in range(n):
    arr.append((a[i], b[i], a[i] * b[i]))
arr = sorted(arr, key=lambda x: x[2])
arr = sorted(arr, key=lambda x: x[1])
for i in range(n):
    a[i], b[i] = arr[i][0], arr[i][1]
currmean = sum(a) // n
meanpos = bs(a, currmean)
if (a[meanpos] != currmean and meanpos > 0):
    meanpos = meanpos - 1
for i in range(n - 1, meanpos, -1):
    diff = abs(a[i] - a[meanpos])
    prevai = a[i]
    a[i] = max(0, a[i] - diff)
    m = m - (prevai - a[i])
    if (m <= 0):
        break
s = 0
for i in range(n):
    s = max(s, (a[i] * b[i]))
print(s)
Esempio n. 19
0
from bisect import bisect_right as bs
n= int(input())
A= [int(input()) for _ in range(n)]
st= A.index(min(A))
B= A[st:]
m=n-st
dp= [-1e9]+[1e9]*m
for i in range(m):
    spot= bs(dp,B[i])
    dp[spot]= min(dp[spot],B[i])
idx=0

for i in range(m,-1,-1):
    if dp[i]<1e9:
        idx=i
        break
print(dp)
print(idx)
print(n-idx+1)


'''
10 1 5 2 3
0 1 2 3 4
7 8 9 1 2 

반례:
5 6 1 3 2 9 8 10 13
5 1 3 2 6 8 9 10 13
1 3 2 5 6 8 9 10 13
1 2 3 5 6 8 9 10 13
from bisect import bisect_left as bs

t = int(input())
for _ in range(t):
    n, m = [int(x) for x in input().strip().split()]
    arr = [int(x) for x in input().strip().split()]
    arr = sorted(arr)
    start = [int(x) for x in input().strip().split()]
    finish = [int(x) for x in input().strip().split()]
    q = len(start)
    for i in range(q):
        #print(start[i],"->",finish[i],"--",end=" ")#debug
        s = bs(arr, start[i])
        e = bs(arr, finish[i])
        if (start[i] > arr[-1] or finish[i] < arr[0]):
            print("{0} {1}".format(0, 0))
        elif (s != e):
            print("{0} {1}".format(abs(e - s), sum(arr[s:e])))
        elif (s == e):
            if (arr[s] == start[i] or arr[e] == finish[i]):
                print("{0} {1}".format(1, arr[s]))
            else:
                print("{0} {1}".format(0, 0))
Esempio n. 21
0
from bisect import bisect_right as bs
n = int(input())
dp = [1e9] * (n + 1)
dp[0] = -1
L = [*map(int, input().split())]
for el in L:
    ths = bs(dp, el)
    if dp[ths - 1] < el:
        dp[ths] = el
#print(dp)
for i in range(n, 0, -1):
    if dp[i] < 1e9:
        print(i)
        break