백준 24060 c++
#include <iostream>
using namespace std;
int N, cnt = 0, K = 0, result = -1;
int* A;
int* tmp;
int input(int lower, int upper)
{
//cout << "input()\n";
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_arr(int *A, int num)
{
//cout << "input_arr()\n";
int i;
for (i = 0; i < num; i++)
{
A[i] = input(1, 1000000000);
}
return;
}
void merge(int *A, int p, int q, int r)
{
int i = p, j = q + 1, t = 1;
while (i <= q && j <= r)
{
if (A[i] <= A[j])
tmp[t++] = A[i++];
else
tmp[t++] = A[j++];
}
while (i <= q)
tmp[t++] = A[i++];
while (j <= r)
tmp[t++] = A[j++];
i = p, t = 1;
while (i <= r)
{
A[i++] = tmp[t++];
cnt++;
if (cnt == K)
{
result = A[i - 1];
break;
}
}
}
void merge_sort(int *A, int p, int r)
{
int q;
if (p < r)
{
q = (p + r) / 2;
merge_sort(A, p, q);
merge_sort(A, q + 1, r);
merge(A, p, q, r);
}
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
N = input(5, 500000);
K = input(1, 100000000);
A = new int[N + 1];
tmp = new int[N + 1];
input_arr(A, N);
merge_sort(A, 0, N-1);
cout << result;
delete[] A;
delete[] tmp;
return 0;
}