Pagini recente » Cod sursa (job #3125740) | Cod sursa (job #2237963) | Cod sursa (job #863531) | Cod sursa (job #661854) | Cod sursa (job #2279495)
#include <fstream>
#include <ctime>
#include <cstdlib>
#define nmax 3000005
using namespace std;
int v[nmax],k;
int pivot(int st, int dr)
{
srand(time(NULL));
int piv=st+(rand()%(dr-st+1));
swap(v[st],v[piv]);
int i=st+1,j=dr,mid;
while (i<j)
{
while (v[i]<=v[st] && i<j )
i++;
while (v[j]>=v[st] && i<j )
j--;
swap(v[i],v[j]);
}
for (mid=j;mid<=i && v[mid]<v[st];mid++);
swap(v[st],v[mid-1]);
return mid-1;
}
int selKmin(int st, int dr)
{
int mid=pivot(st,dr);
if (mid==k)
return v[k];
if (k<mid)
return selKmin(st,mid-1);
if (mid<k)
return selKmin(mid+1,dr);
}
int main()
{
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,i;
fin>>n>>k;
for (i=1;i<=n;i++)
{
fin>>v[i];
}
fout<<selKmin(1,n)<<'\n';
fin.close();
fout.close();
return 0;
}