Pagini recente » Cod sursa (job #2568101) | Borderou de evaluare (job #696579) | Cod sursa (job #2462826) | Cod sursa (job #537287) | Cod sursa (job #661100)
Cod sursa(job #661100)
#include<stdio.h>
#include<stdlib.h>
# define MAX 3000002
using namespace std;
int a[MAX],N,K;
void swap(int i,int j)
{ int aux=a[i];
a[i]=a[j];
a[j]=aux;
}
int partition(int left, int right)
{ int i=left-1,j=right+1,pivot=a[left+ rand()%(right-left+1)];
while(1)
{ do
{ i++;}while(a[i]<pivot);
do
{ j--; }while(a[j]>pivot);
if(i<j)
swap(i,j);
else
return j;
}
return 0;
}
void Quick(int left, int right, int k)
{ if (left==right)
return;
int x=partition(left,right);
int y=x-left+1;
if (y>=k)
Quick(left,x,k);
else
Quick(x+1,right,k-y);
}
int main()
{ freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);
scanf("%d%d",&N,&K);
for(int i=1;i<=N;++i)
scanf("%d",&a[i]);
Quick(1,N,K);
printf("%d",a[K]);
}