C - 列 Editorial
by
seekworser
\(s_i = 0\) となる \(i\) が存在する場合の答えは \(N\)、そうではなく \(K = 0\) の場合の答えは \(0\) です。以下、そうではない場合を考えます。
\(L, R\) を指定したときに \([L, R)\) 区間の総積を高速に取得できるならば、左端 \(L\) を固定するごとに、\(s_L \times s_{L+1} \times \dots s_{R} > K\) となる最大の \(R\) を二分探索によって求めることによってこの問題を解くことができます。 これは、例えば適切にオーバーフロー対策を行ったセグメントツリーなどによって実現可能です。(詳細は実装例)
セグメントツリー上の二分探索を行うことにより、計算量は \(O(N \log N)\) となります。
posted:
last update:
