Beispiel #1
0
 /// <summary>
 /// 長さ <paramref name="n"/> の数列 a を持つ <see cref="Segtree{TValue, TOp}"/> クラスの新しいインスタンスを作ります。初期値は <see cref="TOp.Identity"/> です。
 /// </summary>
 /// <remarks>
 /// <para>制約: 0≤<paramref name="n"/>≤10^8</para>
 /// <para>計算量: O(<paramref name="n"/>)</para>
 /// </remarks>
 /// <param name="n">配列の長さ</param>
 public Segtree(int n)
 {
     AssertMonoid(op.Identity);
     Length = n;
     log    = InternalMath.CeilPow2(n);
     size   = 1 << log;
     d      = new TValue[2 * size];
     Array.Fill(d, op.Identity);
 }
Beispiel #2
0
 /// <summary>
 /// 長さ <paramref name="n"/> の数列 a を持つ <see cref="LazySegtree{TValue, TOp}"/> クラスの新しいインスタンスを作ります。初期値は <see cref="TOp.Identity"/> です。
 /// </summary>
 /// <remarks>
 /// <para>制約: 0≤<paramref name="n"/>≤10^8</para>
 /// <para>計算量: O(<paramref name="n"/>)</para>
 /// </remarks>
 /// <param name="n">配列の長さ</param>
 public LazySegtree(int n)
 {
     AssertMonoid(op.Identity);
     AssertFIdentity(op.Identity);
     AssertF(op.FIdentity, op.Identity, op.Identity);
     Length = n;
     log    = InternalMath.CeilPow2(n);
     size   = 1 << log;
     d      = new TValue[2 * size];
     lz     = new F[size];
     Array.Fill(d, op.Identity);
     Array.Fill(lz, op.FIdentity);
 }