Pagini recente » Cod sursa (job #448289) | Cod sursa (job #1593929) | Cod sursa (job #3246963) | Cod sursa (job #232115) | Cod sursa (job #1601381)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define NMAX 3000010
using namespace std;
int n, A[NMAX], k;
void read();
int divide (int, int);
void qsort (int, int);
void result ();
int main(){
srand(time(NULL));
read();
qsort (0, n-1);
result();
return 0;
}
void read(){
FILE*fin=fopen ("sdo.in", "r");
int i;
fscanf(fin, "%d %d", &n, &k);
for (i=0; i<n; ++i)
fscanf(fin, "%d", &A[i]);
fclose(fin);
return;
}
void result (){
FILE*fout=fopen ("sdo.out", "w");
fprintf(fout, "%d\n", A[k-1]);
fclose(fout);
return;
}
int divide (int st, int dr)
{
int pivot=A[st + (rand()%(dr-st+1))];
while (st<dr){//cat timp mai am macar 2 elemente
while (st<dr && A[dr]>=pivot) --dr;
A[st]=A[dr];
while (st<dr && A[st]<=pivot) ++st;
A[dr]=A[st];
}
A[st]=pivot;
return st;
}
void qsort (int st, int dr){
int poz;
poz=divide (st, dr);
if (poz==k-1) return;
if (st<poz-1) qsort (st, poz-1);
if (poz+1<dr) qsort (poz+1, dr);
}