Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910var nodes23 [24e6]struct{ lo, ro, sum int32 }11var pid23 int32 = -112 13func build23(l, r int) int32 {14 pid23++15 o := pid2316 if l == r {17 return pid2318 }19 m := (l + r) >> 120 nodes23[o].lo = build23(l, m)21 nodes23[o].ro = build23(m+1, r)22 return o23}24 25func add23(old int32, l, r, i int) int32 {26 pid23++27 o := pid2328 nodes23[o] = nodes23[old]29 if l == r {30 nodes23[o].sum++31 return o32 }33 m := (l + r) >> 134 if i <= m {35 nodes23[o].lo = add23(nodes23[o].lo, l, m, i)36 } else {37 nodes23[o].ro = add23(nodes23[o].ro, m+1, r, i)38 }39 nodes23[o].sum = nodes23[nodes23[o].lo].sum + nodes23[nodes23[o].ro].sum40 return o41}42 43func countRange23(o, old int32, l, r, low, high int) int {44 if high < l || r < low {45 return 046 }47 if low <= l && r <= high {48 return int(nodes23[o].sum - nodes23[old].sum)49 }50 m := (l + r) >> 151 if high <= m {52 return countRange23(nodes23[o].lo, nodes23[old].lo, l, m, low, high)53 }54 if m < low {55 return countRange23(nodes23[o].ro, nodes23[old].ro, m+1, r, low, high)56 }57 return countRange23(nodes23[o].lo, nodes23[old].lo, l, m, low, high) + countRange23(nodes23[o].ro, nodes23[old].ro, m+1, r, low, high)58}59 60func cf323C(_r io.Reader, _w io.Writer) {61 out := bufio.NewWriter(_w)62 defer out.Flush()63 _i, _n, buf := 0, 0, make([]byte, 1<<12)64 rc := func() byte {65 if _i == _n {66 _n, _ = _r.Read(buf)67 if _n == 0 {68 return 069 }70 _i = 071 }72 b := buf[_i]73 _i++74 return b75 }76 r := func() (x int) {77 b := rc()78 for ; '0' > b; b = rc() {79 }80 for ; '0' <= b; b = rc() {81 x = x*10 + int(b&15)82 }83 return84 }85 86 n := r()87 mp := make([]int, n+1)88 for i := 1; i <= n; i++ {89 mp[r()] = i90 }91 92 t := make([]int32, n+1)93 t[0] = build23(1, n)94 for i := 1; i <= n; i++ {95 t[i] = add23(t[i-1], 1, n, mp[r()])96 }97 98 x := -199 for m := r(); m > 0; m-- {100 l1 := (r()+x)%n + 1101 r1 := (r()+x)%n + 1102 if l1 > r1 {103 l1, r1 = r1, l1104 }105 l2 := (r()+x)%n + 1106 r2 := (r()+x)%n + 1107 if l2 > r2 {108 l2, r2 = r2, l2109 }110 x = countRange23(t[r2], t[l2-1], 1, n, l1, r1)111 Fprintln(out, x)112 }113}114 115116