問題はこちら
問題概要
長さの数列が与えられる.以下の個のクエリを処理せよ.- が与えられる.は立方数か答えよ.
解説
この問題はMo's algorithmを用いて解くことができます.が立方数であるということは,を素因数分解したときのすべての指数がの倍数であるということです.
各素数が何回かけられたか、という情報を管理しながらMo's Algorithmを行います.を掛ける場合,を素因数分解し,各素因数の個数を足します.各数の素因数分解はエラトステネスの篩などを用いて前計算すれば,で求められます.ただし,更新には素因数の種類分の時間しかかからないので,以下の数に関しては高々個であるため十分高速に動きます.計算量はです.(※極端なケースだとTLEするかもしれません)
Mo's algorithmについては以下の記事を見てください.
kanpurin.hatenablog.com
他のMo's Algorithmを使う問題は以下にまとめてます。
kanpurin.hatenablog.com
提出プログラム
https://atcoder.jp/contests/abc238/submissions/29082974 ヒルベルト曲線https://atcoder.jp/contests/abc238/submissions/29081311 三角形のやつ