Cod sursa(job #2477098)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 19 octombrie 2019 17:18:30
Problema Cautare binara Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 2.06 kb
def readFromFile(array, operations):
    with open("cautbin.in", 'r') as fp:
        n, = [int(x) for x in next(fp).split()]
        array.extend([int(x) for x in next(fp).split()])
        m, = [int(x) for x in next(fp).split()]
        for line in fp:
            operations.append(tuple([int(x) for x in line.split()]))
        fp.close()
    return n, m


def printToFile(value):
    global out
    out.write(value.__str__() + '\n')


def binarySearch(array, value, left, right):

    global closestPosition

    if left > right:
        closestPosition = left
        return -1

    middle = (left + right) // 2

    if array[middle] == value:
        return middle
    elif array[middle] > value:
        binarySearch(array, value, left, middle - 1)
    else:
        binarySearch(array, value, middle + 1, right)


def solve(n, array, m, operations):
    for operation, value in operations:

        if operation == 0:

            position = binarySearch(array, value, 0, n - 1)
            if(position == -1):
                printToFile(-1)
                continue

            while(array[position] == value):
                position += 1
            printToFile(position - 1 + 1)  # + 1 pt ca numerotarea e de la 0

        elif operation == 1:

            position = binarySearch(array, value, 0, n - 1)
            if position == -1:
                printToFile(closestPosition)
                continue

            while(array[position] == value):
                position += 1
            printToFile(position - 1 + 1)

        else:

            position = binarySearch(array, value, 0, n - 1)
            if position == -1:
                printToFile(closestPosition)
                continue

            while(array[position] == value):
                position -= 1
            printToFile(position + 1 + 1)


closestPosition = 0
out = open("cautbin.out", 'w')


def main():
    array = []
    operations = []
    n = 0
    m = 0
    global out

    n, m = readFromFile(array, operations)
    solve(n, array, m, operations)

    out.close()


if __name__ == '__main__':
    main()