백준 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, 1, 1, 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 |