結果
問題 |
No.1036 Make One With GCD 2
|
ユーザー |
|
提出日時 | 2020-04-25 21:14:20 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 638 ms / 2,000 ms |
コード長 | 1,012 bytes |
コンパイル時間 | 150 ms |
コンパイル使用メモリ | 82,200 KB |
実行使用メモリ | 255,808 KB |
最終ジャッジ日時 | 2024-09-16 13:58:09 |
合計ジャッジ時間 | 16,474 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 41 |
ソースコード
INF = 10 ** 9 MOD = 10 **9 + 7 import sys input = sys.stdin.readline 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]) 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)