Skip to content

Commit 5b7cafd

Browse files
authored
Merge pull request #8 from harry0000/fix
Fix code
2 parents 70ca4f2 + 4cdad82 commit 5b7cafd

File tree

7 files changed

+29
-26
lines changed

7 files changed

+29
-26
lines changed

src/main/scala/io/github/acl4s/FenwickTree.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.acl4s
22

33
import scala.reflect.ClassTag
44

5-
import io.github.acl4s.internal.rightOpenInterval
5+
import io.github.acl4s.internal.{rightOpenInterval, IPair}
66

77
/**
88
* Reference: https://en.wikipedia.org/wiki/Fenwick_tree
@@ -34,7 +34,7 @@ case class FenwickTree[T: ClassTag](n: Int)(using m: AddSub[T]) {
3434
}
3535

3636
def sum(range: Range): T = {
37-
val (l, r) = rightOpenInterval(range)
37+
val IPair(l, r) = rightOpenInterval(range)
3838
sum(l, r)
3939
}
4040

src/main/scala/io/github/acl4s/LazySegtree.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.acl4s
22

33
import scala.reflect.ClassTag
44

5-
import io.github.acl4s.internal.{ceilPow2, rightOpenInterval}
5+
import io.github.acl4s.internal.{ceilPow2, rightOpenInterval, IPair}
66

77
final case class LazySegtree[S, F](
88
n: Int
@@ -48,7 +48,7 @@ final case class LazySegtree[S, F](
4848
}
4949

5050
def prod(range: Range): S = {
51-
val (l, r) = rightOpenInterval(range)
51+
val IPair(l, r) = rightOpenInterval(range)
5252
prod(l, r)
5353
}
5454

@@ -89,7 +89,7 @@ final case class LazySegtree[S, F](
8989
}
9090

9191
def applyRange(range: Range, f: F): Unit = {
92-
val (l, r) = rightOpenInterval(range)
92+
val IPair(l, r) = rightOpenInterval(range)
9393
applyRange(l, r, f)
9494
}
9595

src/main/scala/io/github/acl4s/ModInt.scala

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import scala.annotation.targetName
44

55
import io.github.acl4s.internal.{Barrett, LPair}
66

7-
private[acl4s] inline def applyIntImpl(value: Int, mod: Int): Long = {
8-
applyLongImpl(value.toLong, mod)
7+
private[acl4s] inline def applyIntImpl(value: Int, mod: Int): Int = {
8+
var x = value % mod
9+
if (x < 0) { x += mod }
10+
x
911
}
1012

1113
private[acl4s] inline def applyLongImpl(value: Long, mod: Int): Long = {
12-
var x = value % mod.toLong
13-
if (x < 0L) { x += mod.toLong }
14+
var x = value % mod
15+
if (x < 0L) { x += mod }
1416
x
1517
}
1618

@@ -174,7 +176,7 @@ object StaticModInt {
174176

175177
def apply[T <: Int](value: Int)(using m: Modulus[T]): StaticModInt[T] = {
176178
val x = applyIntImpl(value, m.value)
177-
new StaticModInt(x.toInt)
179+
new StaticModInt(x)
178180
}
179181

180182
def apply[T <: Int](value: Long)(using m: Modulus[T]): StaticModInt[T] = {
@@ -285,7 +287,7 @@ object DynamicModInt {
285287

286288
def apply(value: Int): DynamicModInt = {
287289
val x = applyIntImpl(value, bt.m)
288-
new DynamicModInt(x.toInt)
290+
new DynamicModInt(x)
289291
}
290292

291293
def apply(value: Long): DynamicModInt = {

src/main/scala/io/github/acl4s/Segtree.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package io.github.acl4s
22

33
import scala.reflect.ClassTag
44

5-
import io.github.acl4s.internal.{ceilPow2, rightOpenInterval}
5+
import io.github.acl4s.internal.{ceilPow2, rightOpenInterval, IPair}
66

77
final case class Segtree[T](
88
n: Int
@@ -30,7 +30,7 @@ final case class Segtree[T](
3030
}
3131

3232
def prod(range: Range): T = {
33-
val (l, r) = rightOpenInterval(range)
33+
val IPair(l, r) = rightOpenInterval(range)
3434
prod(l, r)
3535
}
3636

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package io.github.acl4s.internal
22

3-
private[acl4s] def rightOpenInterval(range: Range): (Int, Int) = {
3+
private[acl4s] def rightOpenInterval(range: Range): IPair = {
44
assert(range.step == 1 || range.step == -1)
55
if (range.isEmpty) {
6-
(range.start, range.start)
6+
IPair(range.start, range.start)
77
} else if (range.step > 0) {
8-
(range.start, range.last + 1)
8+
IPair(range.start, range.last + 1)
99
} else {
10-
(range.last, range.start + 1)
10+
IPair(range.last, range.start + 1)
1111
}
1212
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
package io.github.acl4s.internal
22

3+
final case class IPair(a: Int, b: Int)
34
final case class LPair(a: Long, b: Long)

src/test/scala/io/github/acl4s/internal/RangeSuite.scala

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ package io.github.acl4s.internal
33
class RangeSuite extends munit.FunSuite {
44

55
test("rightOpenInterval()") {
6-
assertEquals(rightOpenInterval(0 to 10), (0, 11))
7-
assertEquals(rightOpenInterval((0 to 10).reverse), (0, 11))
8-
assertEquals(rightOpenInterval(10 to 0 by -1), (0, 11))
6+
assertEquals(rightOpenInterval(0 to 10), IPair(0, 11))
7+
assertEquals(rightOpenInterval((0 to 10).reverse), IPair(0, 11))
8+
assertEquals(rightOpenInterval(10 to 0 by -1), IPair(0, 11))
99

10-
assertEquals(rightOpenInterval(0 until 10), (0, 10))
11-
assertEquals(rightOpenInterval((0 until 10).reverse), (0, 10))
12-
assertEquals(rightOpenInterval(10 until 0 by -1), (1, 11))
10+
assertEquals(rightOpenInterval(0 until 10), IPair(0, 10))
11+
assertEquals(rightOpenInterval((0 until 10).reverse), IPair(0, 10))
12+
assertEquals(rightOpenInterval(10 until 0 by -1), IPair(1, 11))
1313

14-
assertEquals(rightOpenInterval(0 to 0), (0, 1))
15-
assertEquals(rightOpenInterval((0 until 0).reverse), (0, 0))
16-
assertEquals(rightOpenInterval(0 until 0 by -1), (0, 0))
14+
assertEquals(rightOpenInterval(0 to 0), IPair(0, 1))
15+
assertEquals(rightOpenInterval((0 until 0).reverse), IPair(0, 0))
16+
assertEquals(rightOpenInterval(0 until 0 by -1), IPair(0, 0))
1717
}
1818

1919
}

0 commit comments

Comments
 (0)