結果
問題 |
No.510 二次漸化式
|
ユーザー |
![]() |
提出日時 | 2025-04-16 16:37:17 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,500 bytes |
コンパイル時間 | 563 ms |
コンパイル使用メモリ | 81,904 KB |
実行使用メモリ | 77,324 KB |
最終ジャッジ日時 | 2025-04-16 16:39:36 |
合計ジャッジ時間 | 13,696 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 14 TLE * 1 -- * 19 |
ソースコード
MOD = 10**9 + 7 n = int(input()) q = int(input()) x = [0] * n y = [0] * n valid_b_up_to = 0 # Initially, only b[0] is valid b = [0] * (n + 1) b[0] = 1 valid_S_up_to = 0 # Initially, S[0] is valid (0) S = [0] * (n + 1) for _ in range(q): parts = input().split() if parts[0] == 'x': i = int(parts[1]) v = int(parts[2]) x[i] = v valid_S_up_to = min(valid_S_up_to, i) elif parts[0] == 'y': i = int(parts[1]) v = int(parts[2]) y[i] = v valid_b_up_to = min(valid_b_up_to, i) valid_S_up_to = 0 # Invalidate entire S array else: i = int(parts[1]) if i == 0: print(1) continue # Recompute b up to i-1 if necessary if valid_b_up_to < i - 1: for j in range(valid_b_up_to + 1, i): prev = j - 1 if prev < 0: b[j] = 1 else: b[j] = (y[prev] * b[prev] + 1) % MOD valid_b_up_to = i - 1 # Recompute S up to i if necessary if valid_S_up_to < i: for j in range(valid_S_up_to + 1, i + 1): if j == 0: S[j] = 0 else: prev_j = j - 1 term = (x[prev_j] * pow(b[prev_j], 2, MOD)) % MOD S[j] = (S[j - 1] + term) % MOD valid_S_up_to = i res = (S[i] + 1) % MOD print(res)