有n个数,保存在数组a[1...n],每次挑选数组当中的最大的一个数(如果有多个数都是最大的,随便挑选其中的一个最大数),
把该数变成原来的一半(向下取整,例如最大的数是5,那么会变成2),经过m次这样的操作之后,把a数组所有的数从小到大输出。
输入格式
第一行,两个整数,n和m。1<=n<=100, 1<=m<=10^9。
第二行,n个整数,第i个整数是a[i], 0<=a[i]<=10^9。
输出格式
一行,n个整数,从小到大的次序输出,相邻两个数之间输出一个空格。
输入/输出例子1
输入:
6 4
1 2 3 21 5 4
输出:
1 2 2 2 3 4
作答区域
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100005];
int main(){
cin >> n >> m;
for (int i=1;i<=n;i++)
cin >> a[i];
sort (a+1,a+n+1,greater<long long>());
for (int i=1;i<=m;i++)
{
if (a[1]==0)break;
else a[1]/=2;
sort (a+1,a+n+1,greater<long long>());
}
for (int i=n;i>=1;i--)
cout << a[i] << " " ;
return 0;
}