|
4 | 4 | . "fmt"
|
5 | 5 | "io"
|
6 | 6 | "math"
|
| 7 | + "slices" |
7 | 8 | "sort"
|
8 | 9 | )
|
9 | 10 |
|
@@ -33,44 +34,43 @@ import (
|
33 | 34 | //
|
34 | 35 | // https://oi-wiki.org/misc/mo-algo/
|
35 | 36 | // 模板题 https://www.luogu.com.cn/problem/P1494
|
36 |
| -// todo https://www.luogu.com.cn/problem/P2709 |
37 |
| -// todo https://www.luogu.com.cn/problem/P4462 |
38 |
| -// 恰好出现两次 https://www.luogu.com.cn/problem/P7764 |
39 |
| -// https://www.luogu.com.cn/problem/P5673 |
40 |
| -// https://ac.nowcoder.com/acm/problem/25458 |
41 |
| -// 至少出现两次 https://ac.nowcoder.com/acm/problem/20545 |
42 |
| -// 至少出现 k 次 https://codeforces.com/problemset/problem/375/D |
43 |
| -// 至少出现 k 次 https://www.codechef.com/problems/KCHIPS |
| 37 | +// https://www.luogu.com.cn/problem/P2709 |
| 38 | +// https://www.luogu.com.cn/problem/P4462 |
| 39 | +// 恰好出现两次 https://www.luogu.com.cn/problem/P7764 |
| 40 | +// https://www.luogu.com.cn/problem/P5673 |
| 41 | +// https://ac.nowcoder.com/acm/problem/25458 |
| 42 | +// 至少出现两次 https://ac.nowcoder.com/acm/problem/20545 |
| 43 | +// 至少出现 k 次 https://codeforces.com/problemset/problem/375/D |
| 44 | +// 至少出现 k 次 https://www.codechef.com/problems/KCHIPS |
44 | 45 | // https://codeforces.com/contest/220/problem/B
|
45 | 46 | // https://atcoder.jp/contests/abc242/tasks/abc242_g
|
46 | 47 | // https://atcoder.jp/contests/abc293/tasks/abc293_g
|
47 | 48 | // 区间 mex https://blog.csdn.net/includelhc/article/details/79593496
|
48 | 49 | // 反向构造题 https://www.luogu.com.cn/problem/P6852
|
49 |
| -// todo https://codeforces.com/contest/86/problem/D |
50 |
| -// https://codeforces.com/contest/617/problem/E |
51 |
| -// https://codeforces.com/contest/877/problem/F |
52 |
| -// https://www.codechef.com/problems/QCHEF |
| 50 | +// https://codeforces.com/contest/86/problem/D |
| 51 | +// https://codeforces.com/problemset/problem/617/E 2200 |
| 52 | +// https://codeforces.com/contest/877/problem/F |
| 53 | +// https://www.codechef.com/problems/QCHEF |
53 | 54 | func normalMo(a []int, queries [][]int) []int {
|
54 | 55 | n := len(a)
|
55 | 56 | m := len(queries)
|
56 | 57 | blockSize := int(math.Ceil(float64(n) / math.Sqrt(float64(m))))
|
57 |
| - type moQuery struct{ lb, l, r, qid int } // [l,r) |
| 58 | + type moQuery struct{ bid, l, r, qid int } // [l,r) |
58 | 59 | qs := make([]moQuery, m)
|
59 | 60 | for i, q := range queries {
|
60 | 61 | // 输入是从 1 开始的
|
61 | 62 | l, r := q[0], q[1] // read...
|
62 | 63 | qs[i] = moQuery{l / blockSize, l, r + 1, i}
|
63 | 64 | }
|
64 |
| - sort.Slice(qs, func(i, j int) bool { |
65 |
| - a, b := qs[i], qs[j] |
66 |
| - if a.lb != b.lb { |
67 |
| - return a.lb < b.lb |
| 65 | + slices.SortFunc(qs, func(a, b moQuery) int { |
| 66 | + if a.bid != b.bid { |
| 67 | + return a.bid - b.bid |
68 | 68 | }
|
69 | 69 | // 奇偶化排序
|
70 |
| - if a.lb&1 == 0 { |
71 |
| - return a.r < b.r |
| 70 | + if a.bid&1 == 0 { |
| 71 | + return a.r - b.r |
72 | 72 | }
|
73 |
| - return a.r > b.r |
| 73 | + return b.r - a.r |
74 | 74 | })
|
75 | 75 |
|
76 | 76 | cnt := 0
|
|
0 commit comments