有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=0;i<n;i++)
cin>>a[i];
sort(a,a+n,greater<long long>());
for(int i=0;i<m;i++)
{
if(a[0]==0)break;
else a[0]/=2;
sort(a,a+n,greater<long long>());
}
for(int i=n-1;i>=0;i--)
cout<<a[i]<<" ";
return 0;
}