Cod sursa(job #2477243)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 19 octombrie 2019 21:13:45
Problema Cautare binara Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 2.1 kb
from typing import List
from typing import Tuple

def readFromFile(array: List[int]) -> Tuple[int]:
    global fpr
    n, = [int(x) for x in next(fpr).split()]
    array.extend([int(x) for x in next(fpr).split()])
    m, = [int(x) for x in next(fpr).split()]

    return n, m


def printToFile(value: int) -> None:
    global fpw
    fpw.write(value.__str__() + '\n')


def binarySearch(array: List[int], value: int, left: int, right: int) -> int:

    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: int, array: List[int], m: int) -> None:
    for line in fpr:
        operation, value = [int(x) for x in line.split()]
        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
fpw = open("cautbin.out", 'w')
fpr = open('cautbin.in', 'r')

def main() -> int:
    array = []
    operations = []
    n = 0
    m = 0
    global fpr
    global fpw

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

    fpr.close()
    fpw.close()
    return 0

main()