Pagini recente » Cod sursa (job #2200) | Cod sursa (job #3158067) | Cod sursa (job #2620301) | Cod sursa (job #2464156) | Cod sursa (job #2834399)
#include<stdio.h>
#include<stdlib.h>
const int mx=3e6+1000;
int v[mx],n,k,aux;
inline void swap(int&a,int &b){
aux=b;
b=a;
a=aux;
}
int partition(int*v,int left,int right){
int p_pos=rand()%(right-left+1)+left;
int pivot=v[p_pos];
swap(v[right],v[p_pos]);
int j=left;
for(int i=left;i<=right;i++){
if(v[i]<=pivot){
swap(v[j],v[i]);
j++;
}
}
return j-1;
}
int find(int *v, int left, int right,int nth){
if(left==right){
return v[left];
}
int p=partition(v,left,right);
int lcount=p-left;
if(nth<=lcount){
return find(v,left,p-1,nth);
}
else{
return find(v,p,right,nth-lcount);
}
}
void read(){
FILE* fin=fopen("sdo.in","r");
fscanf(fin,"%d %d",&n,&k);
for(int i=0;i<n;i++){
fscanf(fin,"%d",&v[i]);
}
}
void solve(){
FILE* fout=fopen("sdo.out","w");
fprintf(fout,"%d ",find(v,0,n-1,k));
}
int main(){
read();
solve();
return 0;
}