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
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)
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
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
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
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
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]
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
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)
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)
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))
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")
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)
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)
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)
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)))
''' 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)
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))
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