Submission #18839845
Source Code Expand
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
type SegmentTree struct {
data []interface{}
n int
e interface{}
op func(interface{}, interface{}) interface{}
}
func NewSegmentTree(n int, e interface{}, op func(interface{}, interface{}) interface{}) *SegmentTree {
segtree := new(SegmentTree)
segtree.op = op
segtree.n = 1
for segtree.n < n {
segtree.n *= 2
}
segtree.data = make([]interface{}, segtree.n*2-1)
for i := 0; i < segtree.n*2-1; i++ {
segtree.data[i] = e
}
return segtree
}
func (segtree *SegmentTree) Update(idx int, x interface{}) {
idx += segtree.n - 1
segtree.data[idx] = x
for 0 < idx {
idx = (idx - 1) / 2
segtree.data[idx] = segtree.op(segtree.data[idx*2+1], segtree.data[idx*2+2])
}
}
func (segtree *SegmentTree) query(begin, end, idx, a, b int) interface{} {
if b <= begin || end <= a {
return 0
}
if begin <= a && b <= end {
return segtree.data[idx]
}
v1 := segtree.query(begin, end, idx*2+1, a, (a+b)/2)
v2 := segtree.query(begin, end, idx*2+2, (a+b)/2, b)
return segtree.op(v1, v2)
}
func (segtree *SegmentTree) Query(begin, end int) interface{} {
return segtree.query(begin, end, 0, 0, segtree.n)
}
func main() {
const N = 300000 + 1
segtree := NewSegmentTree(N, 0, func(a, b interface{}) interface{} { return a.(int) ^ b.(int) })
var n, q int
fmt.Scan(&n, &q)
sc := bufio.NewScanner(os.Stdin)
sc.Split(bufio.ScanWords)
for i := 0; i < n; i++ {
sc.Scan()
a, _ := strconv.Atoi(sc.Text())
segtree.Update(i, a)
}
for i := 0; i < q; i++ {
sc.Scan()
t, _ := strconv.Atoi(sc.Text())
sc.Scan()
x, _ := strconv.Atoi(sc.Text())
sc.Scan()
y, _ := strconv.Atoi(sc.Text())
if t == 1 {
z := segtree.Query(x-1, x)
segtree.Update(x-1, (interface{})(z.(int)^y))
}
if t == 2 {
fmt.Println(segtree.Query(x-1, y))
}
}
}
Submission Info
| Submission Time |
|
| Task |
F - Range Xor Query |
| User |
Johniel |
| Language |
Go (1.14.1) |
| Score |
600 |
| Code Size |
1925 Byte |
| Status |
AC |
| Exec Time |
1507 ms |
| Memory |
66152 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt, sample_02.txt |
| All |
handmade_00.txt, handmade_01.txt, max_00.txt, max_01.txt, max_02.txt, max_03.txt, max_04.txt, max_05.txt, max_06.txt, max_07.txt, power_of_2_00.txt, power_of_2_01.txt, power_of_2_02.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, sample_01.txt, sample_02.txt |
| Case Name |
Status |
Exec Time |
Memory |
| handmade_00.txt |
AC |
48 ms |
18840 KiB |
| handmade_01.txt |
AC |
45 ms |
18828 KiB |
| max_00.txt |
AC |
1329 ms |
60232 KiB |
| max_01.txt |
AC |
1325 ms |
60084 KiB |
| max_02.txt |
AC |
1169 ms |
62384 KiB |
| max_03.txt |
AC |
1181 ms |
59708 KiB |
| max_04.txt |
AC |
1507 ms |
57992 KiB |
| max_05.txt |
AC |
1263 ms |
58076 KiB |
| max_06.txt |
AC |
1075 ms |
66152 KiB |
| max_07.txt |
AC |
1216 ms |
57264 KiB |
| power_of_2_00.txt |
AC |
1014 ms |
60572 KiB |
| power_of_2_01.txt |
AC |
1019 ms |
58428 KiB |
| power_of_2_02.txt |
AC |
1000 ms |
57524 KiB |
| random_00.txt |
AC |
958 ms |
45772 KiB |
| random_01.txt |
AC |
808 ms |
54804 KiB |
| random_02.txt |
AC |
206 ms |
37200 KiB |
| random_03.txt |
AC |
965 ms |
54152 KiB |
| random_04.txt |
AC |
124 ms |
28964 KiB |
| sample_01.txt |
AC |
39 ms |
18828 KiB |
| sample_02.txt |
AC |
40 ms |
18828 KiB |