Pagini recente » Cod sursa (job #988692) | Cod sursa (job #2166073) | Cod sursa (job #778175) | Cod sursa (job #2159807) | Cod sursa (job #808271)
Cod sursa(job #808271)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int N=3000100;
int v[N],n,k;
void Sdo(int left,int right){
int randpivot=(rand()%(right-left))+left;
swap(v[randpivot],v[left]);
int pivot=v[left],l=left+1,r=right;
while(l<r){
if(v[l]>pivot){
swap(v[l],v[r]);
r--;
continue;
}
l++;
}
if(v[l]<=pivot){
swap(v[left],v[l]);
if(l==k){
out<<pivot;
return;
}
if(l<k){
Sdo(l+1,right);
return;
}
Sdo(left,l-1);
}
else{
swap(v[left],v[l-1]);
if(l-1==k){
out<<pivot;
return;
}
if(l-1<k){
Sdo(l,right);
return;
}
Sdo(left,l-2);
}
}
int main(){
in>>n>>k;
for(int i=1;i<=n;++i){
in>>v[i];
}
Sdo(1,n);
return 0;
}