結果
問題 | No.1036 Make One With GCD 2 |
ユーザー |
|
提出日時 | 2023-03-10 18:28:13 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 767 ms / 2,000 ms |
コード長 | 2,283 bytes |
コンパイル時間 | 213 ms |
コンパイル使用メモリ | 82,032 KB |
実行使用メモリ | 253,808 KB |
最終ジャッジ日時 | 2024-09-18 03:20:40 |
合計ジャッジ時間 | 19,543 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 41 |
ソースコード
from math import gcdfrom typing import Callable, Generic, List, TypeVarE = TypeVar("E")class SlidingWindowAggregation(Generic[E]):"""SlidingWindowAggregationApi:1. append value to tail,O(1).2. pop value from head,O(1).3. query aggregated value in window,O(1)."""__slots__ = ["_stack0", "_stack1", "_stack2", "_stack3", "_e0", "_e1", "_size", "_op", "_e"]def __init__(self, e: Callable[[], E], op: Callable[[E, E], E]):"""Args:e: unit elementop: merge function"""self._stack0 = []self._stack1 = []self._stack2 = []self._stack3 = []self._e = eself._e0 = e()self._e1 = e()self._size = 0self._op = opdef append(self, value: E) -> None:if not self._stack0:self._push0(value)self._transfer()else:self._push1(value)self._size += 1def popleft(self) -> None:if not self._size:returnif not self._stack0:self._transfer()self._stack0.pop()self._stack2.pop()self._e0 = self._stack2[-1] if self._stack2 else self._e()self._size -= 1def query(self) -> E:return self._op(self._e0, self._e1)def _push0(self, value):self._stack0.append(value)self._e0 = self._op(value, self._e0)self._stack2.append(self._e0)def _push1(self, value):self._stack1.append(value)self._e1 = self._op(self._e1, value)self._stack3.append(self._e1)def _transfer(self):while self._stack1:self._push0(self._stack1.pop())while self._stack3:self._stack3.pop()self._e1 = self._e()@propertydef size(self):return self._sizeif __name__ == "__main__":n = int(input())nums = list(map(int, input().split()))S = SlidingWindowAggregation(lambda: 0, gcd)res = 0right = 0for left in range(n):right = max(right, left)while right < n and gcd(S.query(), nums[right]) != 1:S.append(nums[right])right += 1res += n - rightS.popleft()print(res)