Pagini recente » Monitorul de evaluare | Cod sursa (job #2015439) | Diferente pentru teorema-chineza-a-resturilor intre reviziile 6 si 5 | Monitorul de evaluare | Cod sursa (job #117069)
Cod sursa(job #117069)
#include <cstdio>
#include <string>
#include <ctime>
#include <cstdlib>
#define maxn 1000001
int a[maxn], b[maxn];
inline void rad(int n, int byte, int a[], int b[])
{
int count[1024], index[1024];
int i;
memset(count, 0, sizeof(count));
index[0]=1;
for(i=1;i<=n;++i) ++count[(a[i]>>byte)&1023];
for(i=1;i<1024;++i) index[i]=index[i-1]+count[i-1];
for(i=1;i<=n;++i) b[index[(a[i]>>byte)&1023]++]=a[i];
}
inline void radix(int a[], int n)
{
rad(n, 0, a, b);
rad(n, 10, b, a);
rad(n, 20, a, b);
}
int main()
{
double s=clock();
freopen("radix.in","r",stdin);
int n;
scanf("%d\n", &n);
for(int i=1;i<=n;++i) scanf("%d ", a+i);
radix(a, n);
// for(int i=1;i<=n;++i) printf("%d ", a[i]);
// printf("\n");
printf("%lf\n", (clock()-s)/(double)CLOCKS_PER_SEC);
scanf("%d", &n);
return 0;
}