Форум сайта python.su
0
Вы – путешественник во времени, и вы исследуете структуру данных, хранящую в себе целые числа.
Каждую секунду вы совершаете одно из действий.
add(x, t) – переместиться в момент времени t и добавить в структуру число x.
Если число x в структуре есть, повторного добавления не происходит.
remove(x, t) – переместиться в момент времени t и удалить из структуры число x.
Если числа x в структуре нет, то никакое число не удаляется.
query(t) – переместиться в момент времени t и узнать какие числа находятся в данный момент в структуре.
Число x находится в структуре в момент t при выполнении текущего запроса, если в числе ранее проделанных действий было выполнено add(x, t1), t1 < t, и не было выполнено remove(x, t2), t1 < t2 < t. То есть, число было добавлено к моменту t, и не было удалено после добавления к моменту t.
Офлайн
26
from datetime import date class Travel(): def __init__(self): self.items = {} def get_values(self, t): past = filter(lambda x: x <= t, self.items.keys()) if past: return self.items[max(past)] else: return [] def add(self, x, t): values = self.get_values(t) if x not in values: values.append(x) self.items[t] = values[:] def remove(self, x, t): values = self.get_values(t) if x in values: values.remove(x) self.items[t] = values[:] def query(self, t): values = self.get_values(t) print(values) if __name__ == '__main__': t = Travel() t.add(x=55, t=date(2017, 1, 1)) t.add(x=5, t=date(2018, 1, 1)) t.add(x=7, t=date(2019, 1, 1)) t.remove(x=77, t=date(2020, 1, 1)) t.remove(x=5, t=date(2021, 1, 1)) t.query(t=date(2022, 1, 1)) t.query(t=date(2019, 1, 1)) # [55, 7] # [55, 5, 7]
Офлайн
1
from operator import methodcaller, itemgetter class TimeSet: def __init__(self): self.actions = [] def add(self, x, t): self.actions.append((methodcaller('add', x), t)) self._sort_actions() def remove(self, x, t): self.actions.append((methodcaller('discard', x), t)) self._sort_actions() def query(self, t): values = set() for action in self.actions: if action[1] > t: break action[0](values) return values def _sort_actions(self): self.actions.sort(key=itemgetter(1))
Офлайн