Cod sursa(job #2669710)

Utilizator andrei_ciobanuciobanu andrei andrei_ciobanu Data 7 noiembrie 2020 17:48:12
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <algorithm>

#define NMAX 3000000

using namespace std;

void findk(int v[], int left, int right, int pos){
    int pivot = v[left + rand() % (right - left + 1)];
    int l = left, r = right;
    while (v[l] <= pivot) l++;
    while (v[r] > pivot) r--;
    while (l < r){
        swap(v[l], v[r]);
        do l++; while (v[l] <= pivot);
        do r--; while (v[r] > pivot);
    }
    if (pos <= r && left < r) findk(v, left, r, pos);
    else if(r + 1 < right) findk(v, r + 1, right, pos);
}

int v[NMAX];

int main()
{
    FILE *fin, *fout;
    fin = fopen("sdo.in", "r");
    fout = fopen("sdo.out", "w");
    int n, k;
    fscanf(fin, "%d%d", &n, &k);
    for (int i = 0; i < n; i++) fscanf(fin, "%d", &v[i]);
    findk(v, 0, n - 1, k - 1);
    fprintf(fout, "%d", v[k - 1]);
    return 0;
}