Pagini recente » Cod sursa (job #972052) | Cod sursa (job #1166100) | Cod sursa (job #1493347) | Cod sursa (job #1131180) | Cod sursa (job #1965580)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;
const int INF=2140e6;
const int MaxN=3e6+5;
FILE *IN,*OUT;
int N,K,v[MaxN];
int Partition(int *s,int start,int end)
{
int index=start,piv=s[start+rand()%(end-start+1)];
for(int i=start;i<=end;i++)
if(v[i]<=piv)
swap(v[i],v[index++]);
return index-1;
}
int N_th_Element(int *s,int start,int end,int k)
{
int index=Partition(s,start,end);
if(index-start+1==k)
return s[index];
else if(index-start+1>k)
return N_th_Element(s,start,index,k);
else if(index-start+1<k)
return N_th_Element(s,index+1,end,k-index+start-1);
}
int main()
{
IN=fopen("sdo.in","r");
OUT=fopen("sdo.out","w");
srand(time(NULL));
fscanf(IN,"%d%d",&N,&K);
for(int i=1;i<=N;i++)
fscanf(IN,"%d",&v[i]);
fprintf(OUT,"%d\n",N_th_Element(v,1,N,K));
return 0;
}