https://www.acmicpc.net/problem/10868
10868번: 최솟값
N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는
www.acmicpc.net
직전에 풀었던 최솟값 과 최댓값 구하기와 같았다.
2022.03.15 - [알고리즘 공부] - [백준/세그먼테이션 트리] 2357 최솟값과 최댓값
[백준/세그먼테이션 트리] 2357 최솟값과 최댓값
https://www.acmicpc.net/problem/2357 2357번: 최솟값과 최댓값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수, 또는 제일 큰 정수를 찾는 것은 어려운 일..
minstudy.tistory.com
import sys
from math import *
def init(node,start,end):
if start == end:
tree[node] = arr[start]
return tree[node]
mid = (start+end)//2
tree[node] = min(init(node*2,start,mid),init(node*2+1,mid+1,end))
return tree[node]
def find(node,start,end,left,right):
if start>right or end < left:
return 1000000001
if left<=start and end <= right:
return tree[node]
mid = (start+end)//2
return min(find(node*2,start,mid,left,right),find(node*2+1,mid+1,end,left,right))
input =sys.stdin.readline
n,m = map(int,input().split())
arr = [int(input()) for _ in range(n)]
h = int(ceil(log2(n)))
t_size = 1<<(h+1)
tree = [0] * t_size
init(1,0,n-1)
for _ in range(m):
a,b = map(int,input().split())
print(find(1,0,n-1,a-1,b-1))
'알고리즘 공부' 카테고리의 다른 글
[백준/소수] 19699번 소-난다! (0) | 2022.04.13 |
---|---|
[백준/그리디] 22993번 서든어택3 (0) | 2022.03.17 |
[백준/세그먼테이션 트리] 2357 최솟값과 최댓값 (0) | 2022.03.15 |
[백준/세그먼트트리] 2042번 구간 합 (0) | 2022.03.15 |
[백준/플로이드와샬] 1956번 운동 (0) | 2022.03.14 |