Cod sursa(job #2672680)

Utilizator mirceaisherebina mircea mirceaishere Data 14 noiembrie 2020 13:25:44
Problema Cautare binara Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.42 kb
# cautare binara

def cautare0(st, dr, target):
    while st <= dr:
        mid = (st+dr)/2
        if v[mid] <= target:
            st = mid+1
        else:
            dr = mid-1

    if v[dr] == target:
        return dr + 1
    else:
        return -1

def cautare1(st, dr, target):
    while st <= dr:
        mid = (st+dr)/2
        if v[mid] <= target:
            st = mid+1
        else:
            dr = mid-1

    return dr + 1

def cautare2(st, dr, target):
    while st <= dr:
        mid = (st+dr)/2
        if v[mid] < target:
            st = mid+1
        else:
            dr = mid-1

    return st + 1

with open("cautbin.in", "r") as fin:
    sol = ""
    n = int(fin.readline())
    v = list(int(x) for x in fin.readline().split())
    nr_op = int(fin.readline())
    for i in range(nr_op):
        aux = fin.readline().split()
        tip = int(aux[0])
        x = int(aux[1])

        if tip == 0:
            # cea mai mare pozitie pe care se afla un element cu valoarea x sau -1
            sol += str(cautare0(0, n-1, x)) + "\n"

        if tip == 1:
            # cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x
            sol += str(cautare1(0, n-1, x)) + "\n"

        if tip == 2:
            # cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x
            sol += str(cautare2(0, n-1, x)) + "\n"

with open("cautbin.out", "w") as fout:
    fout.write(sol)