其实我们只要观察一下数据范围就会发现,分数的范围非常小!(只有600)。
于是就顺理成章的想到了桶排序。
桶排序:将[0,1]区间划分为n个等长的子区间。然后,将各个元素按照自己所属的区间放入相应的桶中,只需要将每个桶的元素排好序,依次输出各个桶内的元素,就得到了有序的元素序列。
思路很简单,而且不存在超时。
没什么好说的,就出示代码了。
#include<bits/stdc++.h>
using namespace std;
int n,m,p,a[605],sum=0;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin >> p;
a[p]++;
sum = 0;
for(int j=605;j>=0;j--){
sum+=a[j];
if(sum >= max(1,i*m/100)){
cout<<j<<" ";
break;
}
}
}
}