Untitled
unknown
python
2 years ago
1.6 kB
6
Indexable
def lock(name): index = nodes.index(name) + 1 if status[name] == 'lock' or status[name] == 'fail': return 'false' else: p = index//2 status[nodes[p-1]] = 'fail' status[name] = 'lock' return 'true' def unlock(name): if status[name] == 'lock': status[name] = 'unlock' return 'true' else: return 'false' def upgrade(name): ind = nodes.index(name)+1 c1 = ind * 2 c2 = ind * 2 + 1 if c1 in range(1, n) and c2 in range(1, n): if status[nodes[c1-1]] == 'lock' \ and status[nodes[c2-1]] == 'lock': status[nodes[c1-1]] = 'unlock' status[nodes[c2-1]] = 'unlock' status[nodes[ind-1]] = 'lock' return 'true' else: return 'false' def precompute(queries): d = [] for j in queries: i = j.split() d.append(i[1]) d.append(int(i[0])) status = {} for j in range(0, len(d)-1, 2): status[d[j]] = 0 return status, d def operation(name, code): result = 'false' if code == 1: result = lock(name) elif code == 2: result = unlock(name) elif code == 3: result = upgrade(name) return result n = int(input()) m = int(input()) q = int(input()) nodes = [] queries = [] for i in range(n): nodes.append(str(input())) for i in range(q): queries.append(str(input())) status, d = precompute(queries) for j in range(0, len(d) - 1, 2): print(operation(d[j], d[j + 1]), end = '\n')
Editor is loading...