Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- M = 100003
- class Node:
- def __init__(self, uid, v, next_item=None):
- self.value = [uid, v]
- self.next_item = next_item
- class Chain:
- head = None
- def __search_prev_cur__(self, uid):
- if not self.head:
- return None, None
- if self.head.value[0] == uid:
- return None, self.head
- node = self.head
- while node.next_item and node.next_item.value[0] != uid:
- node = node.next_item
- if node.next_item and node.next_item.value[0] == uid:
- return node, node.next_item
- return None, None
- def put(self, uid, v):
- _, node = self.__search_prev_cur__(uid)
- if node:
- node.value[1] = v
- else:
- node = Node(uid, v, next_item=self.head)
- self.head = node
- def get(self, uid):
- _, node = self.__search_prev_cur__(uid)
- return node.value[1] if node else False
- def delete(self, uid):
- prev, node = self.__search_prev_cur__(uid)
- if not node:
- return False
- ret = node.value[1]
- if not prev:
- self.head = node.next_item
- else:
- prev.next_item = node.next_item
- return ret
- def process_commands(n):
- get_bucket = lambda uid: uid % M
- hash_table = [None for _ in range(M)]
- for _ in range(n):
- args = (input() + ' 0').split()[:3]
- cmd = args[0]
- uid = int(args[1])
- v = int(args[2])
- bucket = get_bucket(uid)
- chain = hash_table[bucket]
- if not chain:
- chain = Chain()
- res = {'put': lambda k, v: chain.put(uid, v),
- 'get': lambda k, v: chain.get(uid),
- 'delete': lambda k, v: chain.delete(uid)}[cmd](uid, v)
- hash_table[bucket] = chain if chain.head else None
- [0 if res is None else print(None) if res is False else print(res)]
- n = int(input())
- process_commands(n)
Add Comment
Please, Sign In to add comment