Cod sursa(job #2078065)

Utilizator karakter98Irimia Robert karakter98 Data 28 noiembrie 2017 21:08:36
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <string.h>
using namespace std;

FILE* fin;
FILE* fout;

int n, k;
unsigned int V[3000000];
unsigned int result[3000000];
unsigned int C[256];
unsigned int O[256];

void radixSort(unsigned int v[], int n, int byte)
{
    for(int i = 0; i < n; ++i)
        C[(v[i] & (0xFF << byte)) >> byte]++;

    for(int i = 1; i < 256; ++i)
        C[i] += C[i - 1];

    for(int i = n - 1; i >= 0; --i)
    {
        result[C[(v[i] & (0xFF << byte)) >> byte] - 1] = v[i];
        C[(v[i] & (0xFF << byte)) >> byte]--;
    }

    memcpy(v, result, sizeof(unsigned int) * n);
    memset(C, 0, sizeof(unsigned int) * 256);
}

int main()
{
    fin = fopen("sdo.in", "r");
    fout = fopen("sdo.out", "w");

    fscanf(fin, "%d %d", &n, &k);

    for(int i = 0; i < n; ++i)
        fscanf(fin, "%u", V + i);

    for(int i = 0; i <= 24; i += 8)
        radixSort(V, n, i);

    fprintf(fout, "%d", V[k - 1]);

    return 0;
}