File tree Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Original file line number Diff line number Diff line change @@ -16,8 +16,8 @@ impl<M: Monoid> From<Vec<M::S>> for Segtree<M> {
16
16
let n = v. len ( ) ;
17
17
let log = ceil_pow2 ( n as u32 ) as usize ;
18
18
let size = 1 << log;
19
- let mut d = vec ! [ M :: IDENTITY ; n ] ;
20
- d[ size..( n + size ) ] . clone_from_slice ( & v[ ..n ] ) ;
19
+ let mut d = vec ! [ M :: IDENTITY ; 2 * size ] ;
20
+ d[ size..( size + n ) ] . clone_from_slice ( & v) ;
21
21
let mut ret = Segtree { n, size, log, d } ;
22
22
for i in ( 1 ..n) . rev ( ) {
23
23
ret. update ( i) ;
@@ -27,7 +27,7 @@ impl<M: Monoid> From<Vec<M::S>> for Segtree<M> {
27
27
}
28
28
impl < M : Monoid > Segtree < M > {
29
29
pub fn set ( & mut self , mut p : usize , x : M :: S ) {
30
- assert ! ( p <= self . n) ;
30
+ assert ! ( p < self . n) ;
31
31
p += self . size ;
32
32
self . d [ p] = x;
33
33
for i in 1 ..=self . log {
@@ -36,7 +36,7 @@ impl<M: Monoid> Segtree<M> {
36
36
}
37
37
38
38
pub fn get ( & self , p : usize ) -> M :: S {
39
- assert ! ( p <= self . n) ;
39
+ assert ! ( p < self . n) ;
40
40
self . d [ p + self . size ]
41
41
}
42
42
You can’t perform that action at this time.
0 commit comments