cs
[BOJ] 10868번 : 최솟값
CS/PS

[BOJ] 10868번 : 최솟값

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

 

10868번: 최솟값

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

www.acmicpc.net

 

segment tree 개념 문제이다. 입력과 출력도 int 범위 내이고, update도 없으므로 크게 어려운 것 없는 문제이다. 다만 최솟값이라는 특성 상 initializing을 할 때 min(init(범위1), init(범위2)) 로 tree 값을 정해주고, query가 주어졌을 때에도 min(query(범위1), query(범위2))와 같은 형식으로 리턴을 하되, 범위 바깥이라면 1,000,000,000 이상의 값을 리턴하여 이 값이 포함되지 않도록 한다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <math.h>
#include <vector>
#define MAX 2000000000
 
using namespace std;
 
const int max_n = 100500;
vector<int> arr={0};
vector<int> tree(max_n*4);
 
int init(int start, int endint node) {
    if(start==endreturn tree[node] = arr[start];
    int mid = (start+end)/2;
    return tree[node] = min(init(start,mid,node*2),init(mid+1,end,node*2+1));
}
 
int query(int start, int endint node, int left, int right) {
    if(start>=left && end <= right) return tree[node];
    if(end<left || start > right) return MAX;
    int mid = (start+end)/2;
    return min(query(start,mid,node*2, left,right),query(mid+1,end,node*2+1,left,right));
}
 
int main ( void ) {
    cin.tie(NULL);cout.tie(NULL);ios_base::sync_with_stdio(false);
 
    int n, m, temp1, temp2;
    cin>>n>>m;
    for(int i = 1; i<= n;i++) {
        cin>>temp1;
        arr.emplace_back(temp1);
    }
    
    init(1,n,1);
    for(int i = 1; i<= m; i++) {
        cin>>temp1>>temp2;
        cout<<query(1,n,1,temp1,temp2)<<'\n';
    }
}
cs

 

이 코드는 내 github에서도 확인할 수 있다.

https://github.com/Jordano-Jackson/PS/blob/main/BOJ/10868/10868.cpp

 

GitHub - Jordano-Jackson/PS: Problem solving

Problem solving. Contribute to Jordano-Jackson/PS development by creating an account on GitHub.

github.com

 

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

[BOJ] 7578번 : 공장  (0) 2021.07.29
[BOJ] 2517번 : 달리기  (0) 2021.07.28
[BOJ] 1781번 : 컵라면  (0) 2021.07.20
[BOJ] 1462번 : 퀴즈쇼  (0) 2021.07.14
[BOJ] 1637번 : 날카로운 눈  (0) 2021.07.13