Algorithm/백준

C++ 알고리즘 - 백준 24060 알고리즘 수업 - 병합 정렬 1

마루설아 2025. 1. 17. 22:37

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

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

int arr[500002];
int tmp[500002];
int cnt = 0;

void CPP_INIT() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
}


void merge(int left, int right) {
	int mid = (left + right) / 2;

	int i = left;
	int j = mid + 1;
	int k = left;
	int temp;

	while (i <= mid && j <= right) {
		if (arr[i] <= arr[j]) {
			tmp[k++] = arr[i++];
		}

		else tmp[k++] = arr[j++];
	}


	if (i > mid) temp = j;
	else temp = i;

	while (k <= right)
		tmp[k++] = arr[temp++];

	for (int i = left; i <= right; i++) {
		arr[i] = tmp[i];
		cnt--;

		if (cnt == 0) cout << tmp[i];
	}
		
}

void merge_sort(int left, int right) {
	int mid;

	if (left < right) {
		mid = (left + right) / 2;

		merge_sort(left, mid);
		merge_sort(mid + 1, right);
		merge(left, right);
	}
}

int main(void) {
	CPP_INIT();

	int input1, input2;
	int num;
	cin >> input1 >> input2;

	cnt = input2;

	for (int i = 0; i < input1; i++) {
		cin >> num;
		arr[i] = num;
	}

	merge_sort(0, input1 - 1);

	if (cnt > 0) cout << -1 << endl;
}