[ 백준 10868 ] 최솟값 (C++, 세그먼트 트리)
[문제보기] [해결과정] - 세그먼트 트리 활용 [소스코드] #include #include #include #include #include using namespace std; typedef long long ll; #define MAX 400005 int n, m, a, b; ll minTree[MAX*10]; ll node[MAX]; // init(배열, 위치, 시작점, 끝점) ll minInit(ll arr[], ll treeIdx, ll dataIdxL, ll dataIdxR) { if (dataIdxL == dataIdxR) return minTree[treeIdx] = arr[dataIdxL - 1]; ll mid = (dataIdxL + dataIdxR) / 2; return minTree..
2021. 4. 17.
[ 백준 2357 ] 최솟값과 최댓값 (C++, 세그먼트 트리)
[문제보기] [해결과정] - 세그먼트 트리 활용 1. minTree, maxTree 구별 2. 각각 init함수와 query함수 작성 [소스코드] #include #include #include #include #include using namespace std; typedef long long ll; #define MAX 400005 int n, m, a, b; ll minTree[MAX*10]; ll maxTree[MAX*10]; ll node[MAX]; // init(배열, 위치, 시작점, 끝점) // init_최소 트리 ll minInit(ll arr[], ll treeIdx, ll dataIdxL, ll dataIdxR) { if (dataIdxL == dataIdxR) return minTre..
2021. 4. 17.
[ 백준 11659 ] 구간 합 구하기 (C++, 세그먼트 트리)
[문제보기] [해결과정] - 세그먼트 트리 사용 [소스코드] typedef long long ll; #include #include #include #include using namespace std; ll node[400000]; ll tree[400000]; // init(배열, 위치, 시작, 끝) ll init(ll arr[], ll treeIdx, ll dataIdxL, ll dataIdxR){ if(dataIdxL == dataIdxR) return tree[treeIdx] = arr[dataIdxL-1]; ll mid = (dataIdxL + dataIdxR) / 2; return tree[treeIdx] = init(arr, 2*treeIdx, dataIdxL, mid) + init(arr,..
2021. 4. 17.