def count(runners, runner, pages): if runners.get(runner) is None: return 0.0 if len(runners.values()) == 1: return 1.0 runner_page = runners[runner] return find(pages, runner_page)/(len(runners.values()) - 1) def find(pages, value): first = 0 last = len(pages) - 1 pos = 0 while first <= last: mid = (first + last) // 2 pos = mid if pages[mid] == value: break else: if value < pages[mid]: last = mid - 1 else: first = mid + 1 if pos == len(pages) - 1 and len(pages) > 1: return len(pages) return pos def insert(pages, old_value, new_value): if old_value is not None: index = find(pages, old_value) pages.pop(index) index = find(pages, new_value) pages.insert(index, new_value) q = int(input()) runners = {} pages = [] for i in range(q): query = input().split(' ') runner = int(query[1]) if query[0] == 'RUN': page = int(query[2]) if runners.get(runner) is None: insert(pages, None, page) runners[runner] = page else: insert(pages, runners[runner], page) runners[runner] = page if query[0] == 'CHEER': print("{:.6f}".format(count(runners, runner, pages))) print(runners, pages)
12 CHEER 5 RUN 1 10 CHEER 1 RUN 2 5 RUN 3 7 CHEER 2 CHEER 3 RUN 3 10 CHEER 3 RUN 3 11 CHEER 3 CHEER 1
0.000000 {} [] {1: 10} [10] 1.000000 {1: 10} [10] {1: 10, 2: 5} [5, 10] {1: 10, 2: 5, 3: 7} [5, 10, 7] 0.000000 {1: 10, 2: 5, 3: 7} [5, 10, 7] 0.000000 {1: 10, 2: 5, 3: 7} [5, 10, 7] {1: 10, 2: 5, 3: 10} [10, 10, 7] 0.500000 {1: 10, 2: 5, 3: 10} [10, 10, 7] {1: 10, 2: 5, 3: 11} [10, 7, 11] 1.500000 {1: 10, 2: 5, 3: 11} [10, 7, 11] 1.500000 {1: 10, 2: 5, 3: 11} [10, 7, 11]