Pagini recente » Cod sursa (job #393401) | Cod sursa (job #157670) | Cod sursa (job #1027455) | Cod sursa (job #1495411) | Cod sursa (job #2669957)
#include <stdio.h>
#include <algorithm>
#include <ctype.h>
using namespace std;
int v[3000000];
FILE *fin, *fout;
int readInt(){
char ch;
int n;
while(!isdigit(ch = fgetc(fin)));
n = ch - '0';
while(isdigit(ch = fgetc(fin))){
n = n *10 + ch - '0';
}
return n;
}
void quickselect(int pmin, int pmax, int poz){
int b, e, p;
p = v[(pmin + pmax) / 2];
b = pmin;
e = pmax;
while(v[b] < p){
b++;
}
while(v[e] > p){
e--;
}
while(b < e){
swap(v[b], v[e]);
do{
b++;
}while(v[b] < p);
do{
e--;
}while(v[e] > p);
}
if((poz <= e) && (pmin < e)){
quickselect(pmin, e, poz);
}else if((e + 1) < pmax){
quickselect(e + 1, pmax, poz);
}
}
int main()
{
int n, k, i;
fin = fopen("sdo.in", "r");
n = readInt();
k = readInt();
for(i = 0; i < n; i++){
v[i] = readInt();
}
fclose(fin);
quickselect(0, n - 1, k - 1);
fout = fopen("sdo.out", "w");
fprintf(fout, "%d", v[k - 1]);
fclose(fout);
return 0;
}