Pagini recente » Cod sursa (job #2489389) | Cod sursa (job #1028455) | Cod sursa (job #1092563) | Cod sursa (job #1042880) | Cod sursa (job #663034)
Cod sursa(job #663034)
#include <iostream>
#include <fstream>
#include<cstdlib>
#define MAXN 3000002
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int a[MAXN],n,k;
void interschimba(int i,int j)
{
int aux=a[i];
a[i]=a[j];
a[j]=aux;
}
int part(int s,int d)
{
int i=s-1,j=d+1,pivot=a[s +rand()%(d-s+1)]; //
while(1)
{
do i++;
while(a[i]<pivot); // primul el mai mare ca pivotul l to r
do j--;
while(a[j]>pivot); // primul elem mai mic ca pivotul r to l
if(i<j)
interschimba(i,j);
else
return j; // ordinul elementului ales random
}
}
void quick(int s,int d,int k)
{
if(s==d) return; // partitia mai are un elemen
int m=part(s,d);
int x;
x=m-s+1;
if(x>=k) quick(s,m,k);
else quick(m+1,d,k-x);
}
int main()
{
f>>n>>k;
for(int i=1;i<=n;i++)
f>>a[i];
quick(1,n,k);
g<<a[k]<<"\n";
return 0;
}