#include<iostream>
using namespace std;
int main(){
int i,x,max=0;
cin>>x;
int a[x];
for(i=0;i<x;i++){
cin>>a[i];
if(max<a[i]){
max=a[i];}
}
int b[max+1];
for(i=0;i<max+1;i++){
b[i]=-1;
}
for(i=0;i<x;i++){
if(b[a[i]]==-1){
b[a[i]]=1;
}
else{
b[a[i]]++;
}
}
i=0;
while(i<=max){
while(b[i]>0&&b[i]!=-1){
cout<<i<<endl;
b[i]--;
}
i++;
}
return 0;
}
伙计我尝试了用于排序的索引方法和codechef显示了这个问题的复杂性不是o(n)但更接近它...问题的时间限制为5秒,源限制为50000字节。
有关如何通过更快的i / o或代码计算来提高性能的任何帮助......
答案 0 :(得分:4)
我非常确定您的代码存在问题,因为您在循环中使用cout << x << endl;
会打印大量的行。
我会在几分钟后回到“差异”。
编辑:不确定无论如何我都能做出很多改变。显然,取决于编译器,它可能会有很大差异,但是使用我的g ++ -O2和100000输入数字,使用endl;
需要0.16 - 0.18s,使用'\n'
需要0.06 - 0.07s
使用printf
并不比cout
快,但scanf
比cin
快一点(0.04s +/- 0.05)。
但是,这与sync_with_stdio
确实有关。如果我们使用cin.sync_with_stdio(false);
,则scanf
和cin
的结果相同。
所有测量均以文件作为输入,文件作为输出 - 写入shell需要更长的时间,但那是因为它滚动了100k行文本。
(你的程序会因为“大”输入或大量输入而崩溃 - 如果max
大于约1百万,代码将因堆栈外崩溃而崩溃 - 在许多系统上,也会发生较低的值)
答案 1 :(得分:0)
避免使用 cin 和 cout ,并使用C IO功能 scanf 和 printf 。你会发现它们比慢速c ++函数快5倍。