Pagini recente » Cod sursa (job #236220) | Cod sursa (job #2095764) | Cod sursa (job #1693742) | Cod sursa (job #2828314) | Cod sursa (job #2537040)
f=open('cautbin.in')
n=int(f.readline())
l_elem=[int(x) for x in f.readline().split()]
x=int(f.readline())
def cautare_binara_tip_0(st,dr):
if st>=dr:
if l_elem[st]==x:
return st
else:
return -1
else:
mij=(st+dr)//2
if l_elem[mij]==x:
speranta=cautare_binara_tip_0(mij+1,dr)
return max(mij,speranta)
elif l_elem[mij]>x:
return cautare_binara_tip_0(st,mij-1)
else:
return cautare_binara_tip_0(mij+1,dr)
def cautare_binara_tip_1(st,dr):
if st>=dr:
if l_elem[st]<=x:
return st
return -1
else:
mij=(st+dr)//2
if l_elem[mij]<=x:
speranta=cautare_binara_tip_1(mij+1,dr)
return max(mij,speranta)
elif l_elem[mij]>x:
return cautare_binara_tip_1(st,mij-1)
def cautare_binara_tip_2(st,dr):
if st>=dr:
if l_elem[st]>=x:
return st
else:
return 1<<31
else:
mij=(st+dr)//2
if l_elem[mij]>=x:
speranta=cautare_binara_tip_2(st,mij-1)
return min(mij,speranta)
elif l_elem[mij]<x:
return cautare_binara_tip_2(mij+1,dr)
g=open('cautbin.out','w')
for linie in f:
linie=linie.split()
linie[0]=int(linie[0])
x=int(linie[1])
if linie[0]==0:
t=cautare_binara_tip_0(0,len(l_elem)- 1)
if t!=-1:
g.write(str(t+1)+'\n')
else:
g.write('-1'+ '\n')
elif linie[0]==1:
g.write(str(cautare_binara_tip_1(0, len(l_elem) - 1) + 1)+'\n')
else:
g.write(str(cautare_binara_tip_2(0, len(l_elem) - 1) + 1)+'\n')
f.close()
g.close()