ei1903の競プロメモ

競プロの解説など

HOJ 1254 - AND AND AND...

問題URL

問題概要

$N \ $個の整数$ \ a_1,a_2,\ldots,a_N \ $が与えられる。
$A \ $の連続部分列であってそれらの論理積が$ \ K \ $より大きくなるものについて、その部分列の長さの最大値を求めよ。

制約

  • $1 \leq N \leq 10^5$
  • $0 \leq K \leq 2^{60}$
  • $0 \leq a_i \leq 2^{60}$

解説

$f(l,r) = a_l \ \mathrm{AND} \ a_{l+1} \ \mathrm{AND} \ \ldots \ \mathrm{AND} \ a_r \ $とすると、$M \ $は$ \ f(l,r) \gt K \ $を満たす$ \ r - l + 1 \ $の最大値となります。

$l \ $を固定したとき、任意の正整数$ \ k \ $について$ \ f(l,r) \geq f(l,r + k) \ $が自明に成り立ちます。
そのため、各$ \ l \ $について$ \ r \ $を全探索するか、尺取り法により答えを求めることができます。
また、$f(l,r) \ $の値はビットごとに累積和を取っておくか、セグメントツリーを用いて高速に求めることができます。