Pagini recente » Cod sursa (job #2263931) | Cod sursa (job #1067519) | Cod sursa (job #1022479) | Cod sursa (job #2486359) | Cod sursa (job #1244158)
#include <fstream>
#include <vector>
#include <set>
#include <deque>
#include <queue>
#include <algorithm>
#include <map>
#include <limits>
#include <cstdlib>
#include <sstream>
using namespace std ;
const int NMAX = 10000010 ;
const int INF = 0x3f3f3f3f ;
const int BYTE = 8 ;
ifstream cin("radixsort.in") ;
ofstream cout("radixsort.out") ;
int A, B, C, N ;
int V[NMAX] ;
inline void READ()
{
cin >> N >> A >> B >> C ;
V[1] = B % C;
for(int i = 2 ; i <= N ; ++ i)
V[i] =(1LL * A * V[i - 1] + B) % C ;
}
int GET_BYTE(int val, int byte)
{
return (val >> (byte * BYTE)) & ((1 << BYTE) - 1) ;
}
inline void COUNT_SORT(int c_byte)
{
vector <int> suma[1 << BYTE] ;
for(int i = 0 ; i < 1 << BYTE ; ++ i)
suma[i].clear() ;
for(int i = 1 ; i <= N ; ++ i)
suma[GET_BYTE(V[i], c_byte)].push_back(V[i]) ;
for(int i = 0, k = 0; i <= N ; ++ i)
for(vector <int> :: iterator it = suma[i].begin() ; it != suma[i].end() ; ++ it)
V[++ k] = *it ;
}
inline void RADIX_SORT()
{
for(int i = 0 ; i <= 3 ; ++ i)
COUNT_SORT(i) ;
}
inline void OUT()
{
for(int i = 1 ; i <= N ; ++ i)
cout << V[i] << ' ' ;
cout << '\n' ;
}
int main()
{
READ() ;
RADIX_SORT() ;
OUT() ;
cin.close() ;
cout.close() ;
return 0 ;
}