본문 바로가기
BOJ

10868. 최솟값

by hyunnwoo 2023. 7. 19.

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

 

10868번: 최솟값

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

www.acmicpc.net

 

 

 

티어 : 골드1

 

세그먼트 트리로 풀었다.

15분 정도 걸린거 같다.

 

 

#include<stdio.h>
#include<algorithm>

using namespace std;
#define MAX 1000000000;

int arr[100005], seg[400005];

int n, m;

int init(int index, int left, int right){
    if(left == right) return seg[index] = arr[left];
    int mid = (left + right) / 2;
    return seg[index] = min( init(index*2, left, mid), init(index*2+1, mid+1, right) );
}

int find(int index, int left, int right, int a, int b){
    if(a <= left && right <= b) return seg[index];
    if(right < a || b < left) return MAX + 1;
    int mid = (left + right) / 2;
    return min( find(index*2, left, mid, a, b), find(index*2+1, mid+1, right, a, b) );
}

int main()
{
    scanf("%d %d", &n, &m);
    for(int i=1 ; i<=n ; i++) scanf("%d", &arr[i]);
    init(1, 1, n);

    for(int i=0 ; i<m ; i++){
        int a, b;
        scanf("%d %d", &a, &b);
        printf("%d\n", find(1, 1, n, a, b));
    }
}

'BOJ' 카테고리의 다른 글

6549. 히스토그램에서 가장 큰 직사각형  (0) 2023.07.21
1086. 박성원  (0) 2023.07.20
8980. 택배  (0) 2023.07.18
1300. K번째 수  (0) 2023.07.18
2042. 구간 합 구하기  (0) 2023.07.18