Cod sursa(job #966009)

Utilizator Theorytheo .c Theory Data 25 iunie 2013 02:01:47
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
//statistici de orinde, radix sort(10 ^ 9)

#include<fstream>
#include<cstring>

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

const int Nmax = 3000009;
const int Limit = (1<<16) - 1;

int N; int K; int A[Nmax]; int B[Nmax];

void Read(){

    fin >> N >> K;
    for(int i = 1; i <= N; ++i) fin >> A[i];
}


void Rad(const int byte, int A[], int B[]){

    int Count[Limit], Ind[Limit];

    memset(Count, 0, sizeof(Count));

    for(int i = 1; i <= N; ++i) ++Count[(A[i] >> byte) & Limit];

    Ind[0] = 1;

    for(int i = 1; i <= Limit; ++i) Ind[i] = Ind[i - 1] + Count[i - 1];

    for(int i = 1; i <= N; ++i)  B[ Ind[ (A[i] >> byte) & Limit ]++] = A[i];
}


void Solve(){

    Rad(0, A, B);
    Rad(16, B, A);
    //Rad(16, A, B);
    //Rad(24, B, A);
}

void Print(){

    //for(int i = 1; i <= N; ++i) fout << A[i] <<" " ;

    fout << A[K];
}

int main(){

    Read (); Solve (); Print ();

    return 0;
}