結果
問題 |
No.1036 Make One With GCD 2
|
ユーザー |
|
提出日時 | 2020-04-25 21:13:39 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,012 bytes |
コンパイル時間 | 94 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 282,648 KB |
最終ジャッジ日時 | 2024-11-07 20:23:15 |
合計ジャッジ時間 | 8,531 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 4 |
other | TLE * 1 -- * 40 |
ソースコード
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)