Pagini recente » Cod sursa (job #1266601) | Cod sursa (job #1991643) | Cod sursa (job #657620) | Cod sursa (job #177694) | Cod sursa (job #1449074)
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
#define N 3000005
int v[N], n, k;
inline void schimb(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
void part3(int a[N], int li, int lf, int &p1, int &p2) {
p1 = li;
p2 = lf - 1;
int i = li, piv = a[lf];
while (i <= p2) {
if (a[i] < piv)
schimb(a[i++], a[p1++]);
else if (a[i] > piv)
schimb(a[i], a[p2--]);
else
i++;
}
schimb(a[lf], a[++p2]);
}
void quicksort(int a[N], int li, int lf, int k) {
int m1, m2;
if(li>=lf)
return;
//m=pozdiv(a,li,lf);
part3(a, li, lf, m1, m2);
if(k < m1)
quicksort(a, li, m1 - 1, k);
if(k > m2)
quicksort(a, m2 + 1, lf, k);
}
int main()
{
srand(time(NULL));
in >> n >> k;
for(int i = 1; i <= n; i++)
in >> v[i];
for (int i = n; i >= 1; i--)
{
int p = 1 + rand()%i;
schimb(v[i], v[p]);
}
quicksort(v, 1, n, k);
out << v[k] << '\n';
return 0;
}