不同于其他大佬的堆,我用的是类似与插入排序的方法,将最后输入的数插到已经排好序的数列中,输出中间那个数。
有点AcWing 113. 特殊排序 的感觉
#include <iostream>
using namespace std;
const int N = 10010;
int main()
{
int T;
cin >> T;
while(T--)
{
int a[N];
int t , n;
cin >> t >> n;
cout << t << ' ' << ((n + n%2) >> 1) << endl;
cin >> a[0];//必须得先将第一个数存入,要不然第一趟for循环的i从0开始,r=-1,会在if(a[r] > x)中出错
cout << a[0] << ' ';
int cnt = 1;
for(int i = 1 ; i < n ; i++)
{
int x;
cin >> x;
int l = 0 , r = i - 1;
while(l < r)
{
int mid = l + r + 1 >> 1;
if(mid == i) break;
if(a[mid] <= x) l = mid;
else r = mid - 1;
}
a[i] = x;
for(int j = i - 1 ; j > r ; j--) swap(a[j] , a[j + 1]);
if(a[r] > x) swap(a[r] , a[r + 1]);
if(i % 2 == 0)
{
cout << a[i >> 1] << ' ' ;
cnt ++;
if(cnt % 10 == 0) cout << endl;//每输出10个空行
}
}
if(cnt % 10)//当cnt是10的倍数时不用再空行
cout << endl;
}
return 0;
}