結果
問題 |
No.1036 Make One With GCD 2
|
ユーザー |
|
提出日時 | 2020-04-25 21:09:35 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 647 ms / 2,000 ms |
コード長 | 1,140 bytes |
コンパイル時間 | 362 ms |
コンパイル使用メモリ | 82,160 KB |
実行使用メモリ | 264,984 KB |
最終ジャッジ日時 | 2024-09-16 13:57:35 |
合計ジャッジ時間 | 16,567 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 41 |
ソースコード
INF = 10 ** 9 MOD = 10 **9 + 7 import sys sys.setrecursionlimit(100000000) dy = (-1,0,1,0) dx = (0,1,0,-1) from math import gcd class SparseTable(): def __init__(self,arr,func,unit): self.N = len(arr) self.K = self.N.bit_length() self.func = func self.unit = unit self.table = [self.unit] * (self.N * self.K) for i in range(self.N): self.table[i] = arr[i] for k in range(1,self.K): for i in range(self.N - (1<<(k - 1))): self.table[i + k*self.N] = self.func(self.table[i + (k - 1)*self.N],self.table[i + (1<<(k - 1)) + (k - 1)*self.N]) def query(self,l,r): if l >= r: return self.unit k = (r - l).bit_length() - 1 return self.func(self.table[l + k*self.N],self.table[r - (1<<k) + k*self.N]) def main(): n = int(input()) a = list(map(int,input().split())) sp = SparseTable(a,gcd,0) r = 0 ans = 0 for l in range(n): while r < n and sp.query(l,r + 1) != 1: r += 1 ans += n - r print(ans) if __name__=='__main__': main()