AcWing 789. 数的范围

789. 数的范围 - AcWing题库

 

 

重点在于两个二分方法的使用一个需要补偿1,另一个不需要
主要在于向左递归 和向右递归

package main

import "fmt"

func main() {

	var n, m int
	fmt.Scan(&n, &m)

	q := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&q[i])
	}

	for ; m > 0; m-- {
		var x int
		fmt.Scanf("%d", &x)

		// 二分起始坐标
		l, r := 0, n-1

		for l < r {
			mid := (l + r) / 2

			if q[mid] >= x {
				r = mid
			} else {
				l = mid + 1
			}
		}

		if q[l] != x {
			fmt.Println("-1 -1")
		} else {
			fmt.Print(l, " ")

			l, r = 0, n-1
			for l < r {
				mid := (l + r + 1) / 2
				if q[mid] <= x {
					l = mid
				} else {
					r = mid - 1
				}
			}
			fmt.Println(l)
		}
	}

}

posted @ 2026-01-11 21:23  BlackSnow  阅读(0)  评论(0)    收藏  举报