Pagini recente » Cod sursa (job #2927538) | Cod sursa (job #676338) | Cod sursa (job #2909537) | Cod sursa (job #2156156) | Cod sursa (job #2669710)
#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;
}