Pagini recente » Cod sursa (job #3809) | Cod sursa (job #1107612) | Cod sursa (job #32643) | Cod sursa (job #2376968) | Cod sursa (job #2690950)
def read_gen(filename):
with open(filename, 'rt') as fin:
for line in fin:
for x in line.split():
yield int(x)
def bs_bigger_or_none(v, x):
n = len(v)
step = 1
while step <= n: step <<= 1
pos = 1
while step > 0:
if pos + step <= n and v[pos + step] <= x:
pos += step
step >>= 1
return pos if v[pos] == x else -1
def bs_less_or_equal(v, x):
n = len(v)
step = 1
while step <= n: step <<= 1
pos = 1
while step > 0:
if pos + step <= n and v[pos + step] <= x:
pos += step
step >>= 1
return pos if v[pos] <= x else -1
def bs_least_greater(v, x):
n = len(v)
step = 1
while step <= n: step <<= 1
pos = 1
while step > 0:
if pos + step <= n and v[pos + step] < x:
pos += step
step >>= 1
return -1 if pos == n else pos + 1
if __name__ == '__main__':
it = read_gen(filename='cautbin.in')
n = next(it)
v = [0] + [next(it) for _ in range(n)]
with open('cautbin.out', 'wt') as fout:
m = next(it)
for _ in range(m):
t, x = next(it), next(it)
if t == 0:
ans = bs_bigger_or_none(v, x)
elif t == 1:
ans = bs_less_or_equal(v, x)
elif t == 2:
ans = bs_least_greater(v, x)
fout.write('{0}\n'.format(ans))