문제
출처 : www.acmicpc.net/problem/10868
N개의 숫자들을 입력받고 구간 (a,b)를 M번 입력받는다.
구간 a,b사이에서 가장 작은 값을 출력하는 문제다.
풀이
N과 M이 최대 10만이라 모든경우를 다 봐주면 1억번돌아서 시간초과가 나기때문에, 세그먼트 트리를 이용해서 각 구간을 빠르게 찾아줘야한다.
세그먼트 트리에 각 구간의 최솟값을 저장한다.
예제 1의 경우,
구간 1~10 에서의 최솟값은 5,
구간 1~5 : 30
구간 6~10 : 5
.
.
.
으로 저장해놓는다.
입력받을 받고 해당하는 구간내의 최솟값을 찾아 출력하면 끝
소스코드
https://github.com/devxb/JJUNalgo/blob/master/10868%20%EC%B5%9C%EC%86%9F%EA%B0%92/main.cpp
'알고리즘 (2020 : 08 : 10 ~ ) > 세그먼트 트리' 카테고리의 다른 글
[백준 / BOJ] 2812 크게 만들기 (Java / 세그먼트 트리) (0) | 2022.08.16 |
---|---|
[백준 / BOJ] 1275 커피숍2 (0) | 2021.04.13 |
[백준 / BOJ] 1395 스위치 (0) | 2020.12.29 |
[백준 / BOJ] 10999 구간 합 구하기 2 (0) | 2020.12.28 |