Cod sursa(job #1163787)

Utilizator nickulNic Kul nickul Data 1 aprilie 2014 17:04:13
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>
#include<vector>
     
using namespace std;
     
ifstream in("radixsort.in");
ofstream out("radixsort.out");
     
int main()
{
    unsigned int n,a,b,c,i;
    vector<unsigned int> v,v1,v2;
    in>>n>>a>>b>>c;
	v1.resize(65536);
	v2.resize(n);
	v.push_back(b);
    for(i=1;i<n;i++)
    {
		v.push_back((1LL*v.at(i-1)*a+b)%c);
        v1.at(v.at(i)&0x0000FFFF)++;
    }
	for(i=1;i<1<<16;i++)
		v1.at(i)+=v1.at(i-1);
	for(i=n-1;i<n;i--)
		v2.at(--v1.at(v.at(i)&0x0000FFFF))=v.at(i);
	v=v2;
	v1.resize(0);
	v2.resize(0);
	v1.resize(65536);
	v2.resize(n);
	for(i=0;i<n;i++)
        v1.at((v.at(i)&0xFFFF0000)>>16)++;
	for(i=1;i<1<<16;i++)
		v1.at(i)+=v1.at(i-1);
	for(i=n-1;i<n;i--)
		v2.at(--v1.at((v.at(i)&0xFFFF0000)>>16))=v.at(i);
	v=v2;
    for(i=0;i<v.size();i+=10) out<<v.at(i)<<" ";
}