버블 정렬

시간 제한1초메모리 제한64 MB

요약
N개 수에 버블 정렬 한 라운드를 K번 적용한 뒤 배열 상태를 구합니다.
난이도

보통10점 중 6점

유형
세그먼트 트리, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

버블 정렬은 인접한 두 원소를 비교해 자리를 바꾸는 방식으로 길이가 NN인 수열을 정렬하는 알고리즘이다. 다음 절차를 한 번 수행하는 것을 한 회차라고 하자.

  • 첫 번째 값과 두 번째 값을 비교해 첫 번째 값이 더 크면 자리를 바꾼다.
  • 두 번째 값과 세 번째 값을 비교해 두 번째 값이 더 크면 자리를 바꾼다.
  • 같은 방식으로 오른쪽 끝까지 이어 간다.
  • N−1N-1번째 값과 NN번째 값을 비교해 N−1N-1번째 값이 더 크면 자리를 바꾼다.

한 회차를 NN번 반복하면 수열은 오름차순으로 정렬된다. 세찬이는 정렬이 끝난 결과를 이미 알기에 중간 과정을 보고 싶어 한다. 그런데 NN이 매우 커서 회차를 KK번 그대로 흉내 내면 시간이 오래 걸린다. 세찬이를 도와 회차를 KK번 수행한 뒤 수열의 상태를 구하는 프로그램을 작성하여라.

입력

첫째 줄에 NN과 KK가 공백을 사이에 두고 주어진다.

둘째 줄에 처음 수열을 이루는 NN개의 정수가 차례대로 공백을 사이에 두고 주어진다.

  • 1≤N≤1000001 \le N \le 100000
  • 1≤K≤N1 \le K \le N
  • 수열의 각 항은 11 이상 10000000001000000000 이하의 정수이다.

출력

회차를 KK번 수행한 뒤 수열의 상태를 한 줄에 출력한다. 각 수는 공백 하나로 구분한다.

예제3

  1. 예제 1

    입력
    4 1
    62 23 32 15
    
    예상 출력
    23 32 15 62
    
  2. 예제 2

    입력
    1 1
    7
    
    예상 출력
    7
    
  3. 예제 3

    입력
    5 5
    5 4 3 2 1
    
    예상 출력
    1 2 3 4 5