넘치게 채우기

[BOJ] 10868 - 최솟값 본문

PS/BOJ

[BOJ] 10868 - 최솟값

riveroverflow 2025. 2. 26. 13:40
728x90
반응형

https://www.acmicpc.net/problem/10868

BOJ - 최솟값

문제 유형: 세그먼트 트리

문제 난이도: Gold I

시간 제한: 1초

메모리 제한: 256MB

 

문제

N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 어려운 문제가 된다. 이 문제를 해결해 보자.

여기서 a번째라는 것은 입력되는 순서로 a번째라는 이야기이다. 예를 들어 a=1, b=3이라면 입력된 순서대로 1번, 2번, 3번 정수 중에서 최솟값을 찾아야 한다. 각각의 정수들은 1이상 1,000,000,000이하의 값을 갖는다.

 

입력

첫째 줄에 N, M이 주어진다. 다음 N개의 줄에는 N개의 정수가 주어진다. 다음 M개의 줄에는 a, b의 쌍이 주어진다.

 

출력

M개의 줄에 입력받은 순서대로 각 a, b에 대한 답을 출력한다.

 

풀이

세그먼트 트리의 기본 문제 중 하나.

https://riveroverflow.tistory.com/entry/%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8-%ED%8A%B8%EB%A6%AC%EC%99%80-%EC%A7%80%EC%97%B0%EC%A0%84%ED%8C%8C-Segment-Tree-with-lazy-propagation

 

세그먼트 트리와 지연전파 (Segment Tree, with lazy propagation)

세그먼트 트리References:https://youtu.be/-dUiRtJ8ot0?si=SRjeBHChrzUaN-id  세그먼트 트리란, 1차원 배열에서의 구간 연산에 대해 빠르게 구하는 자료구조이다.구간 [l, r]에 대해서 기존의 naive하게 업데이트

riveroverflow.tistory.com

를 참고.(여기서는 지연전파는 필요없다)

 

 

코드

Go

package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

var (
	arr []int32
	seg []int32
)

func build(index, l, r int32) {
	if l == r {
		seg[index] = arr[l]
		return
	}

	mid := (l + r) >> 1
	build(index*2, l, mid)
	build(index*2+1, mid+1, r)
	seg[index] = min(seg[index*2], seg[index*2+1])
}

func query(index, l, r, ql, qr int32) int32 {
	if l > qr || r < ql {
		return math.MaxInt32
	}
	if ql <= l && r <= qr {
		return seg[index]
	}

	mid := (l + r) >> 1
	return min(query(index*2, l, mid, ql, qr), query(index*2+1, mid+1, r, ql, qr))
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, m int32
	fmt.Fscan(reader, &n, &m)
	arr = make([]int32, n+1)
	seg = make([]int32, 4*(n+1))

	for i := int32(1); i <= n; i++ {
		fmt.Fscan(reader, &arr[i])
	}

	build(1, 1, n)

	for i := int32(0); i < m; i++ {
		var a, b int32
		fmt.Fscan(reader, &a, &b)
		fmt.Fprintln(writer, query(1, 1, n, a, b))
	}

}
728x90
반응형

'PS > BOJ' 카테고리의 다른 글

[BOJ] 5052 - Phone List  (0) 2025.02.27
[BOJ] 3353 - Printed Circuit Board  (0) 2025.02.25
[BOJ] 1520 - 내리막 길  (0) 2025.02.24
[BOJ] 1389 - 케빈 베이컨의 6단계 법칙  (0) 2025.02.24
[BOJ] 28703 - Double It  (0) 2025.02.24