백준 10868번 최솟값

세그먼트 트리 문제

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
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <vector>
#include <queue>
#include<string>
#include <algorithm>
#include <cstring> //memset
#include<tuple>
using namespace std;
typedef long long ll;
const ll MAX = 1000000000;
const int INF = 87654321;
const int NUM = 100000 + 1;
ll seg[NUM * 4= {};
ll arr[NUM] = {};
int N, M;
struct Segtree {
 
    ll query(int l, int r, int node, int nodeL, int nodeR) {
        if (nodeL > r || nodeR < l) return MAX;
        if (l <= nodeL && nodeR <= r) return seg[node];
        int mid = (nodeL + nodeR) / 2;
        return min(query(l, r, node * 2, nodeL, mid), query(l, r, node * 2 + 1, mid + 1, nodeR));
    }
 
    ll init(int l, int r, int node) {
        if (l == r) return seg[node] = arr[l];
        int mid = (l + r) / 2;
        return seg[node] = min(init(l, mid, node * 2), init(mid + 1, r, node * 2 + 1));
 
    }
 
};
 
 
int main(void)
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    scanf("%d %d"&N, &M);
    for (int i = 1; i <= N; i++) {
        scanf("%lld"&arr[i]);
    }
    Segtree Tree;
    Tree.init(1, N, 1);
    for (int i = 1; i <= M; i++) {
        int a, b;
        scanf("%d %d"&a, &b);
        ll ans = Tree.query(a, b, 11, N);
        printf("%lld\n", ans);
    }
 
    return 0;
}
cs

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


전형적인 세그먼트 트리문제입니다. 푸는방법은 어렵지 않았는데 

이상하게 cin cout을 입출력으로 사용하면 시간초과가 나네요ㅋㅋㅋ c언어 입출력을 사용하니, 바로 AC를 받았습니다.

입출력이 생각보다 시간을 많이 잡아먹나봐요


'알고리즘 > BAEKJOON' 카테고리의 다른 글

백준 2580번 스도쿠  (0) 2019.06.30
백준 2517번 달리기  (0) 2019.05.24
백준 2042번 구간 합 구하기  (0) 2019.05.22
백준 15357번 Portal  (0) 2019.05.18
백준 16118번 달빛 여우  (0) 2019.05.18

+ Recent posts