#include <stdio.h>
int N, M, n[100001];
int mid(int a, int b, int c){
if (n[a] > n[b]&& n[a] < n[c])return a;
if (n[b] > n[a]&& n[b] < n[c])return b;
return c;
}
int q_sort_up(int s, int e){
if (s >= e)return 0;
int l = mid(s, e, (s + e) / 2);
int L = n[l], T = s, i, temp;
temp = n[l]; n[l] = n[e]; n[e] = temp;
for (i = s; i < e; i++){
if (L >= n[i]){
temp = n[T]; n[T] = n[i]; n[i] = temp;
T++;
}
}
if (L < n[T]){
temp = n[T]; n[T] = n[e]; n[e] = temp;
}
if (s < T){
q_sort_up(s, T);
}
if (T + 1 < e){
q_sort_up(T + 1, e);
}
}
int q_sort_down(int s, int e){
if (s >= e)return 0;
int l = mid(s, e, (s + e) / 2);
int L = n[l], T = s, i, temp;
temp = n[l]; n[l] = n[e]; n[e] = temp;
for (i = s; i < e; i++){
if (L <= n[i]){
temp = n[T]; n[T] = n[i]; n[i] = temp;
T++;
}
}
if (L > n[T]){
temp = n[T]; n[T] = n[e]; n[e] = temp;
}
if (s < T){
q_sort_down(s, T);
}
if (T + 1 < e){
q_sort_down(T + 1, e);
}
}
int main(void)
{
int i, j;
scanf("%d %d", &N, &M);
for (i = 0; i < N; i++){
scanf("%d", &n[i]);
}
if (M==0)q_sort_up(0, N - 1);
else q_sort_down(0, N - 1);
for (i = 0; i < N; i++){
printf("%d\n", n[i]);
}
}















머 다른 소스보고 할수도 있는데 이렇게 계속 반갈이 하면서 재귀호출하면 절대 스택이 터질리가없는데


숫자 최대 100000 입력돼 봣자 log100000 번 호출되는거 아닌가