만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

순열과 사이클 (최소 버전)

시간 제한2초메모리 제한2048 MB

요약
1부터 n까지의 순열을 만들어, 인접한 두 수의 합이 x 이하이면서 사이클 개수가 최소가 되도록 구합니다.
난이도

보통10점 중 5점

유형
배열, 그리디, 구현
정답자
아직 제출이 없습니다

문제

주어진 xx에 대해, 크기가 nn인 순열이 모든 1≤i<n1 \le i < n에 대해 pi+pi+1≤xp_i + p_{i+1} \le x를 만족하면 좋은 순열이라고 한다. 사이클 개수가 최소인 좋은 순열을 하나 찾는다.

크기가 nn인 순열은 11부터 nn까지의 서로 다른 정수 nn개를 나열한 수열이다.

순열 pp의 사이클은 pi1=i2p_{i_1} = i_2, pi2=i3p_{i_2} = i_3, …\ldots, pik=i1p_{i_k} = i_1을 만족하는 인덱스 수열 i1,i2,…,iki_1, i_2, \ldots, i_k이다. 수열을 순환 이동한 결과만 다른 사이클은 같은 사이클로 본다.

입력

첫 줄에 테스트 케이스의 개수 tt (1≤t≤2⋅1051 \le t \le 2 \cdot 10^5)가 주어진다. 이어서 테스트 케이스가 주어진다.

각 테스트 케이스는 한 줄에 두 정수 nn (2≤n≤2⋅1052 \le n \le 2 \cdot 10^5)과 xx (n+1≤x≤2n−1n + 1 \le x \le 2n - 1)로 주어진다. 이 조건에서는 좋은 순열이 적어도 하나 존재한다.

모든 테스트 케이스의 nn 합은 2⋅1052 \cdot 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 두 줄을 출력한다. 첫 줄에는 길이 nn인 좋은 순열의 사이클 개수 최솟값을 출력한다. 둘째 줄에는 순열의 nn개 정수를 출력한다. 답이 여러 개라면 그중 아무거나 하나를 출력해도 된다.

예제1

  1. 예제 1

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