Pagini recente » Cod sursa (job #2908515) | Cod sursa (job #3169427) | Cod sursa (job #980338) | Cod sursa (job #1989926) | Cod sursa (job #2662957)
class MinHeap:
def __init__(self):
self.val = []
self.heap = []
self.pos = []
def __upheap__(self, node):
while node > 0 and self.val[self.heap[node]] < self.val[self.heap[(node-1)//2]]:
self.heap[node], self.heap[(node-1)//2] = self.heap[(node-1)//2], self.heap[node]
self.pos[self.heap[node]] = node
self.pos[self.heap[(node-1)//2]] = (node-1)//2
node = (node-1)//2
def __getIdxMin__(self, node):
if node*2+2 < len(self.heap):
return node*2+1 if self.val[self.heap[node*2+1]] <= self.val[self.heap[node*2+2]] else node*2+2
return node*2+1
def __downheap__(self, node):
while node < len(self.heap)//2:
idxMin = self.__getIdxMin__(node)
if self.val[self.heap[node]] > self.val[self.heap[idxMin]]:
self.heap[node], self.heap[idxMin] = self.heap[idxMin], self.heap[node]
self.pos[self.heap[node]] = node
self.pos[self.heap[idxMin]] = idxMin
node = idxMin
else:
return
def insert(self,val):
self.val.append(val)
self.heap.append(len(self.val)-1)
self.pos.append(len(self.heap)-1)
self.__upheap__(len(self.heap)-1)
def deleteAt(self,index):
self.val[index] = -1
self.__upheap__(self.pos[index])
self.pos[self.heap[0]] = -1
self.heap[0] = self.heap[-1]
self.pos[self.heap[0]] = 0
self.heap.pop()
self.__downheap__(0)
def getMin(self):
return self.val[self.heap[0]]
def __repr__(self):
return str([self.val[x] for x in self.heap])
h = MinHeap()
with open('heapuri.in', 'r') as f:
with open('heapuri.out','w') as g:
for _ in range(int(f.readline())):
info = f.readline().split()
if info[0] == '1':
h.insert(int(info[1]))
elif info[0] == '2':
h.deleteAt(int(info[1])-1)
else:
g.write(str(h.getMin()) + '\n')