Pagini recente » Cod sursa (job #2149779) | Cod sursa (job #2565247) | Cod sursa (job #422744) | Cod sursa (job #3989) | Cod sursa (job #2704079)
//#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int n,k;
unsigned int v[3000005];
int mediana(int st,int dr)
{
int mid=(st+dr)>>1;
if(v[dr]<v[st])
swap(v[dr],v[st]);
if(v[mid]<v[st])
swap(v[mid],v[st]);
if(v[dr]<v[mid])
swap(v[dr],v[mid]);
return mid;
}
void quickselect(int st,int dr)
{
if(st<dr)
{
int piv=mediana(st,dr);
swap(v[dr],v[piv]);
int i=st-1;
for(int j=st;j<=dr-1;j++)
if(v[j]<v[dr])
{
i++;
swap(v[i],v[j]);
}
i++;
swap(v[dr],v[i]);
if(i==k)
{
out<<v[i];
exit(0);
}
else if(i<k)
quickselect(i+1,dr);
else
quickselect(st,i-1);
}
out<<v[k];
exit(0);
}
int main()
{
in>>n>>k;
for(int i=1;i<=n;i++)
in>>v[i];
quickselect(1,n);
}