Cod sursa(job #3134995)

Utilizator Catalin12Cata Caraulasu Catalin12 Data 1 iunie 2023 12:29:15
Problema Zeap Scor 0
Compilator py Status done
Runda Arhiva de probleme Marime 2.08 kb
class Zeap:
    def __init__(self):
        self.elements = {}
        self.order = []

    def INSEREAZA(self, x):
        if x not in self.elements:
            self.elements[x] = True
            self.order.append(x)

    def STERGE(self, x):
        if x in self.elements:
            del self.elements[x]
            self.order.remove(x)
        else:
            return -1

    def CAUTA(self, x):
        if x in self.elements:
            return 1
        else:
            return 0

    def MAX_DIF(self):
        if len(self.elements) < 2:
            return -1

        max_diff = float('-inf')
        for i in range(len(self.order)):
            for j in range(i + 1, len(self.order)):
                diff = abs(self.order[i] - self.order[j])
                if diff > max_diff:
                    max_diff = diff

        return max_diff

    def MIN_DIF(self):
        if len(self.elements) < 2:
            return -1

        min_diff = float('inf')
        for i in range(len(self.order)):
            for j in range(i + 1, len(self.order)):
                diff = abs(self.order[i] - self.order[j])
                if diff < min_diff:
                    min_diff = diff

        return min_diff


# Citirea datelor de intrare
with open('zeap.in', 'r') as f:
    lines = f.readlines()

# Initializarea structurii de date Zeap
zeap = Zeap()

# Prelucrarea operațiilor
output = []
for line in lines:
    line = line.strip().split()
    operation = line[0]
    value = int(line[1]) if len(line) > 1 else None

    if operation == 'I':
        zeap.INSEREAZA(value)
    elif operation == 'S':
        result = zeap.STERGE(value)
        if result is not None:
            output.append(str(result))
    elif operation == 'C':
        output.append(str(zeap.CAUTA(value)))
    elif operation == 'MAX':
        output.append(str(zeap.MAX_DIF()))
    elif operation == 'MIN':
        output.append(str(zeap.MIN_DIF()))

# Scrierea rezultatelor în fișierul de ieșire
with open('zeap.out', 'w') as f:
    f.write('\n'.join(output))