由于该题的n过大 所以一般地最坏情况为平方级的排序可以排除
由于鉴于每个自然数的范围过大 所以桶排序可以排除
那么接下来我们就可以用堆排做这道题
以下为我在RQNOJ上AC全部通过的程序:
#include
using namespace std;
const int N=200008;
long long a[N];
void dui(int v,int n)
{
int i,j;
i=v;j=i*2;
a=a[i];
while(j<=n){
if(j
if(a
a[i]=a[j];
i=j;
j=i*2;
}
else j=n+1;
}
a[i]=a;
return;
}
int yun(void)
{
long long i,j,n,p1,p2;
cin>>n;
for(i=1;i<=n;i++)cin>>a[i];
for(i=n/2;i>=1;i--)dui(i,n);
for(i=n;i>=2;i--){
a=a[i];
a[i]=a;
a=a;
dui(1,i-1);
}
p1=a;
for(i=1;i<=n;){
cout<
for(p2=0,j=i;a[j]==p1&&j<=n;j++)p2++;
cout<
i=j;
p1=a[j];
}
return 0;
}
int main(void)
{
freopen("RQNOJ-P133.in","r",stdin);
freopen("RQNOJ-P133.out","w",stdout);
std::ios::sync_with_stdio(false);
yun();
return 0;
}
标签:c++